私にはいくつかのプロセス(100から1000のオーダー)があり、それぞれが他のプロセスのいくつか(たとえば約10)にデータを送信する必要があります。(通常、常にではありませんが、AがBに送信する場合、BはAにも送信します。)すべてのプロセスは、どのプロセスから受信する必要があるデータの量を知っています。
したがってMPI_Alltoallv
、メッセージの長さの多くまたはほとんどをゼロにして、を使用することができます。ただし、パフォーマンス上の理由から、グローバルよりも複数の通信を使用する方がよいと聞きました。私が理解していないこと:一連の送信および受信呼び出しが1つのAlltoallv呼び出しよりも効率的である場合、なぜAlltoallvは一連の送信および受信として実装されないのですか?MPI_send
MPI_recv
MPI_Alltoallv
私(および他の人?)にとって、グローバルコールを1つだけ使用する方がはるかに便利です。また、いくつかのSendとRecvでデッドロック状態に陥らないようにする必要があるかもしれません(奇数偶数戦略またはより複雑な方法で修正可能ですか?またはバッファリングされたsend / recvを使用して修正可能ですか?)。
たとえば、10および;よりも遅くMPI_Alltoallv
必要であることに同意しますか。はいの場合、その理由と金額は?MPI_Send
MPI_Recv