2017-10-01 21 views
1

std::threadからMPI_Initに電話をかけても安全ですか?ここでは二つの問題がMPI_Initを別のスレッドから呼び出すことは安全ですか?

1)が「安全」問題で示したコードですがあります

int main(int argc, char** argv) { 

    std::thread mpi_thread([...](){ 
     MPI_Init(...); 

     // All MPI calls are done by this thread. 

     MPI_Finalize(); 
    }); 

    // The main thread is doing different stuff 

    mpi_thread.join(); 
    return 0; 
} 
+0

私はそれに何か間違っているとは思わないが、私はこれの目的は何か疑問に思う。 –

+0

また、より良いインターフェースのために[Boost.MPI](http://www.boost.org/doc/libs/1_65_1/doc/html/mpi.html)を使用することもできます。 –

+0

私は今のところ午前ですが、Boost.MPIには独自の問題があります。多くの場合、何が起こっているのかを推測するために、MPIのドキュメンテーションに戻らなければなりません。 – OutOfBound

答えて

3

MPI standardは、セクションに関するMPIとスレッドを持っています。 1つの重要な部分は、次のとおりです。

初期化と終了MPI_FINALIZEへの呼び出しは、MPIを初期化した同じスレッド上で発生する必要があります。このスレッドをメインスレッドと呼びます。 すべてのプロセススレッドがMPI呼び出しを完了し、保留中の通信またはI/O操作を実行していない場合にのみ、呼び出しが行われます。

あなたのコードはこの要件を満たしています。

MPIは、いくつかのレベルのスレッドサポートを認識しています。

MPI_THREAD_FUNNELEDプロセスがマルチスレッドのかもしれませんが、アプリケーションは、メインスレッドがMPI呼び出しを作ることを確認する必要があります:あなたのコードが必要です。あなたが正しく、この実装を使用することはできません示すprovided == MPI_THREAD_SINGLEを返さなければなりません準拠したスレッドされていない

int provided; 
MPI_Init_thread(NULL, NULL, MPI_THREAD_FUNNELED, &provided); 
if (provided < MPI_THREAD_FUNNELED) 
    MPI_Abort(MPI_COMM_WORLD, -1); 

A MPIライブラリ:

良い測定のためには、次の代わりMPI_Initを呼び出す必要がありますあなたのコード。

実際には、一般的な実装でうまくいくはずです。スレッドサポートのさまざまなレベルの詳細については、MPI標準の12.4.3を参照してください。スレッドサポートのレベルが高くなると、選択した実装に応じて走行距離が異なることがあります。

+0

ありがとうございます。 Thatsはスタンダードへのリファレンスとして非常に詳細です。 – OutOfBound

1

オーケー

MPIの計算がで起こるのではい、ここに示すコードは、100%安全ですシングルスレッド。何かが「間違っている」場合は、コンパイラとクラスタに関するいくつかの情報を含む再現可能な例が必要です。ベンダー特有の構成上の問題のために、チャンスがあります。何年も前に、ベンダーはMPIのメインスレッドを「祝福する」でしょう。

2)MPIスレッドは安全ですか?あなたは2番目のスレッドでMPI_RECVに電話できますか?

これは、ここで議論されにくい質問です:thread safety of MPI send using threads created with std::async

+0

ありがとうございます。 MPIは一般的にスレッドセーフではないことを認識しています(これは難しいことを学ばなければなりませんでした)。 – OutOfBound

+0

私はあなたの答えの一部(2)があまりアドバイスされていないと言います。このような状況は、多かれ少なかれデッドロックを保証します。 –

+0

@HenriMenkeどの部分?単純にコードの複雑さではないにしても、スレッディングライブラリ(pthreads/std ::をノードのローカル通信ではなくノード間のMPI)と組み合わせることはお勧めしません。あまりにも多くのリソースを持つ研究グループの中にはこれがあります。 – Mikhail

関連する問題