2

行列のセクションをルート プロセスから他のすべてのプロセスに送信して、計算を実行できるようにする必要があります。次に、計算を受け取り、ルート プロセスで集計する必要があります。Scatter を使用しますが、マトリックスはルート プロセスにしか存在できません (宿題の規定)。

MPI_Sendrecv_replace または MPI_Sendrecv が役立つ関数であることはわかっています。ただし、マトリックスのセクションを他のプロセスに送信し、計算してから返す必要があります。送信と受信の間に計算を行う必要がある場合、Sendrecv 関数をどのように使用すればよいですか。私はこれを概念化するのに苦労しています。

例えば:

Process 0 sends to Process 1,2,3
Process 1,2,3 compute sections of matrix
Process 0 receives all of the computations

sendrecv 関数がオールインワンである場合、これはどのように起こりますか?

さらに、送信操作と受信操作を別々に使用すると、nxn マトリックスでこれを行う予定であり、サイズが大きくなる可能性があるため、(呼び出しを入念に管理しない限り) 確実にデッドロックが発生すると思います。

Sendrecv 関数を使用するにはどうすればよいですか?

4

1 に答える 1

1

MPI_Sendrecv何かをやり取りするという意味ではありません。MPI_Sendrecv代わりにsend command、プロセッサ A で a を実行し、receive commandプロセッサ B で a を実行します (A から B に何かを送信する場合)。

次の場合に1 つ必要Sendrecvです。

Process 0 sends to Process 1

次に、次の計算と別の計算を行いますSendrecv

Process 0 receives from 1
于 2013-03-17T20:26:18.077 に答える