2

私が最近学んだ関連する質問では、複数のスレッドが通信する MPI を使用する際には非常に注意する必要があるということです。私が使用する実装は をサポートしていないためMPI_THREAD_MULTIPLE、すべてMPI::COMM_WORLDの呼び出しをstd::lock_guard<std::mutex>.

私の質問:これはやり過ぎですか?具体的に言うSendと、正確な時間にできRecvますか?

std::mutex送信用、受信用の2つで試してみました。私のテストマシンでは、エラーなしでいくつかのテストを実行しましたが、それは保証ではなく、単なる偶然かもしれません..

追加: 何百回ものテスト実行で、実際には 1 つのお粗末なセグメンテーション違反が発生しましたが、これが同時送受信によるものかどうかについては 100% 確信が持てません。

4

1 に答える 1

0

どの MPI スレッド モードを使用していますか? を使用していない限り、ミューテックスを使用するだけでは十分ではありません。使用MPI_THREAD_SERIALIZEDしている場合は、すべての MPI 呼び出しに対して単一のミューテックスを使用する必要があります。ご覧のとおり、それはそれらをシリアル化します。MPI_Init_threadwithを使用していない場合MPI_THREAD_SERIALIZED(つまり、MPI_Initまたはより低いスレッド設定を使用している場合)、mutex を使用しても十分ではありません。正確な制限については、MPI 標準を参照してください。を使用している場合MPI_THREAD_SERIALIZED、同じ操作であるか異なる操作であるかに関係なく、同時に複数のスレッドから MPI 呼び出しを入力することはできないという規則があります。

于 2013-07-07T06:05:35.190 に答える