2

を使用して 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
4

1 に答える 1

0

最新のプロセッサ/オペレーティング システムでは、メモリはプログラムのプロセス空間にマップされます。プログラムは、使用しているスペースの実際の物理メモリ アドレスを認識 (または関心) しません。実際に必要なのはデバイス ドライバだけです。

于 2013-07-11T16:36:49.783 に答える