1

最初に別のプロセッサからポインターのアドレスを取得し、そのアドレスのアイテムを指すポインターが必要です。MPI_Recv についてあまり心配する必要はありません。別のプロセッサから情報を取得していることを知っておいてください。ので、私は持っています:

MPI_Recv(&a, sizeof(int), MPI_INT, 0, 1, MPI_COMM_WORLD, &status);  

c = a;
printf("%d",c[0]);

これによりセグメンテーション違反が発生するのはなぜですか? c = a を設定する前に c にもメモリを割り当てようとしましたが、それでもセグメント フォールトが発生します。

4

1 に答える 1

6

各プロセスには、独自の個別の仮想アドレス空間があります。あるプロセスからのポインターは、別のプロセスのコンテキストでは無意味です。

いくつかのオプションがあります:

  1. プロセスの代わりにスレッドを使用します。
  2. 共有メモリを使用します。
  3. 単なるポインターではなく、実際のデータを送信します。

プロセスが異なるコンピューターに存在できる場合は、最後のオプションのみが実行可能です。

于 2013-03-19T07:19:38.160 に答える