を使用して valgrind で MPI プログラムを実行してmpirun -np 3 valgrind test
いるときに、malloc/calloc された配列のアドレスが異なるプロセスで同じになる場合があることに気付きました。これにより、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