2012-03-31 19 views
0

MPI_Bsend_init/MPI_Startは、最高の非同期バッファリング通信です。あなたは、プロセッサ間でデータをやり取りするより良い方法を考えていますか?擬似コードN処理ノードのためのMPI_Bsend_init/MPI_Startは、最良の非同期バッファリング通信です。

MPI_Recv(request[i]) -- Recv data 

    for(i=0;i<N;i++) MPI_Bsend_init(request[i]) -- Setup request 

    MPI_Start(request[i]) -- Send data 
+2

(a)持続的な通信要求と(b)バッファされた通信を希望する場合、これは完全に適切な方法です。しかし、私は実際に持続的なコミュニケーションが大きなパフォーマンス上の利点をもたらすことは見当たりませんでした。バッファされたセンドは、このOpenMPI開発者が列挙したように、独自の問題を抱えています。http://blogs.cisco.com/performance/top-10-reasons- why-buffered-sends-are-evil /です。 –

+0

@JonathanDursiありがとうございました。私はMPI_Bsendの問題もあります。代わりにMPI_Isendを使うことをお勧めしますか? – Naga

答えて

1

BSENDは、パフォーマンスの観点から、ここで間違っている機能です。今日の本質的にすべての実装で使用されている熱心なプロトコルは、小さなメッセージのために受信側で自動的にバッファリングされるため、Bsendの利点はほとんどありません。

いずれの場合でも、永続的な送信は、あなたが使用しているように、すでに非ブロックであるため、Isent_initのようなものはありません。例えば、 http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node51.html

コールが 通信をノンブロッキングのセクションで説明ノンブロッキング 通信動作と同様のセマンティクスと、ローカルです。それは... MPI_SEND_INITによって作成された要求にMPI_STARTの呼び出しが MPI_ISENDへの呼び出しと同じように通信を開始し、

され、私の同僚は、永続的な送信-Recv関数がないことを確認して私を驚かせてきました最新のInfiniBandクラスタで効率を向上させます。私はIBページの登録が前もって行われているため、これが前提です。

関連する問題