MPIでの複数の非同期非同期転送のポリシーは何ですか?
いくつかの開いている非同期irecv
操作を持つプログラムがあります。発生する可能性のある転送(対応するものisend
が呼び出された)が、まだ準備ができisend
ていない(対応するものがまだ呼び出されていない)他の転送を待機していることがわかりました。明らかに、この非効率性はネットワークの競合に起因するものではありません。ネットワークが不必要にアイドル状態になっています。
私のプログラムは次のようになります。
マシン1
call irecv(variable A from machine 2)
call irecv(variable B from machine 2)
call irecv(variable C from machine 2)
call wait(variable C from machine 2)
call do_important_work_with(variable C)
....
マシン2
call isend(variable C to machine 1)
call isend(variable B to machine 1)
call do a bunch of costly work
call isend(variable A to machine 1)
....
問題
の転送C
により、の転送が不必要にブロックされているようですA
。
私はそれを見つけるwait
のvariable C
マシン1には、マシン2完了にコストのかかる作業の後まで完了しません。この転送は私のプログラムの最初に開始された可能性があるため、これは残念です。の転送がA
完了するのを不必要に待機しているようです。
ご質問
特に、私は次のような計算をしています。
- これは予想されますか?
- 複数の非同期非同期転送のポリシーは何ですか?
- コードを再配置せずにこれを回避できますか(関連する内部設定はありますか)?
- 複数のライブ転送に関するMPIのポリシーについて詳しく知るには、どこに行けばよいですか?