0

MPI 3.0 のリモート アクセス メモリについては、MPI_Put と MPI_Get の 2 つの通信呼び出しがあります。以下を使用して、ローカル データを共有メモリに格納します (説明のために、 https://software.intel.com/en-us/blogs/2014/08/06/one-sided-communicationからいくつかのステートメントをコピーしました)。

 if (id < num_procs-1)
      MPI_Put(&localbuffer[0], NUM_ELEMENT, MPI_INT, id+1, 0, NUM_ELEMENT, MPI_INT, win);
   else
      MPI_Put(&localbuffer[0], NUM_ELEMENT, MPI_INT, 0, 0, NUM_ELEMENT, MPI_INT, win);

ここで、num_procs はプロセッサーの数、id はプロセッサーのランクです。それらはそれぞれ以下から返されます。

   MPI_Comm_rank(MPI_COMM_WORLD, &id);
   MPI_Comm_size(MPI_COMM_WORLD, &num_procs);

MPI_Put の後、各プロセッサからのデータを共有メモリに配置する必要があります。次に、私のコードは、この共有メモリからデータを取得したいと考えています

if (id != 0)
      MPI_Get(&localbuffer[0], NUM_ELEMENT_get, MPI_INT, id-1, 0, NUM_ELEMENT, MPI_INT, win);
   else
      MPI_Get(&localbuffer[0], NUM_ELEMENT_get, MPI_INT, num_procs-1, 0, NUM_ELEMENT, MPI_INT, win);

私の質問は、NUM_ELEMENT とは異なる NUM_ELEMENT_get でケースを実行することは可能ですか? これは、同じプロセッサが共有メモリから取得するデータの数と、送信するデータの数が異なることを意味します。これに関するもう 1 つの問題は、個々のプロセッサが取得するデータが異なるプロセッサから送信される可能性があることです。では、上記の MPI_Get 呼び出しで id-1 と num_procs-1 の引数を指定するにはどうすればよいでしょうか? 私はこれを実装しようとはしていませんが、私のコードでの MPI 実装の設計について考えています。

どうもありがとう。

4

0 に答える 0