行列のセクションをルート プロセスから他のすべてのプロセスに送信して、計算を実行できるようにする必要があります。次に、計算を受け取り、ルート プロセスで集計する必要があります。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 関数を使用するにはどうすればよいですか?