Запуская программу MPI с valgrind с использованием mpirun -np 3 valgrind test
, я заметил, что адреса массивов malloc/calloc'ed иногда идентичны для разных процессов. Это заставило бы меня поверить, что адреса, сообщаемые Valgrind, либо не являются абсолютными, либо не соответствуют адресам физической памяти, что имело бы смысл, поскольку он использует свой собственный распределитель. Может ли кто-нибудь подтвердить это или сказать мне, какое тривиальное понимание мне здесь не хватает? Спасибо.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#include <assert.h>
int main(int argc, char* argv[])
{
int rank, nproc;
/* first let MPI strip off its MPI stuff: */
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &nproc);
double* a;
int n = 40;
assert(a = calloc(n, sizeof(double)));
printf("Rank %d: Address of a = %p\n",rank,a);
free(a);
MPI_Finalize();
return 0;
}
Пример вывода:
Rank 0: Address of a = 0x6dad300
Rank 1: Address of a = 0x67a8800
Rank 2: Address of a = 0x67a8800