2016-04-12 24 views
3

次のコードセグメントを使用して、複数スレッドのmpiライブラリを初期化しています。しかし、私はこのMPI実装がMPI_THREAD_MULTIPLEをサポートしていないことを示す次の出力を常に得る。複数のスレッドを持つMPI

mpiexec --version and ompi_info 

を行う上で

MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); 
if(provided != MPI_THREAD_MULTIPLE) 
{ 
    fprintf(stderr, "This MPI implementation does not support MPI_THREAD_MULTIPLE.\n" 
} 

私はこの出力を得る:mpiexecの(OpenRTE)1.4.3およびオープンMPI:1.4.3

私はC mpiccののmpi_hello.cを、使用してコンパイルファイルに上記のコードセクションが含まれています。私のmpiライブラリが複数のスレッドをサポートしない理由は何ですか? プロセスではなく、異なるスレッドからmpiメッセージを送受信したいとします。

おかげ

答えて

8

使用しているプラ​​ットフォームまたはディストリビューションまたはビルドを指定していません。使用しているライブラリがマルチスレッド使用のために構成されていない可能性があります。あなたのバイナリが実行して持っているどの機能をテストすることができます

$ ./configure --enable-mpi-thread-multiple 

$ ompi_info | grep -i thread 
      Thread support: posix (mpi: yes, progress: no) 

それがサポートされていない場合、あなたはおそらく必要になりますソースからビルドするときに、あなたのようなものでそれを構築する必要があります〜build from source

このモードで実行されている制限事項に関する情報を含む、重要な詳細についてはOpenMPI documentation on MPI_Init_Threadを参照してください:MPI_THREAD_MULTIPLEサポートは軽くテストされ

注こと。スレッド集中型アプリケーションではうまくいかない可能性があります。また、下記のBTLのMPIポイントツーポイント通信機能のみがスレッドセーフであると考えられます。他のサポート機能(例えば、MPI属性)は、複数のスレッドによって同時に使用される場合、安全と認定されていない。

報告するバージョン(1.4)も非常に古いことに注意してください。現在の安定バージョンはv1.10です。

複数のスレッドを使用する場合は、デザインを再検討することができます。主にクラスタ化されたアプリケーションを対象としている、MPIより適したいくつかのスレッドフレームワーク(Threaded Building Blocksなど)があります。いくつかの選択肢:

3

は、スレッドのサポートにMPIのドキュメントをチェックアウト:オープンMPIは--enable-MPIスレッド複数のconfigureスイッチで構成されている場合 MPI_THREAD_MULTIPLEサポートが含まれています。

shell$ ompi_info | grep -i thread 
     Thread support: posix (mpi: yes, progress: no) 

「MPI:はい」上記の出力の一部がオープンMPIはMPI_THREAD_MULTIPLEサポート付きでコンパイルされたことを示しているあなたは、オープンMPIはMPI_THREAD_MULTIPLEをサポートしているかどうかを確認するために(1)ompi_infoの出力を確認することができます。

checkout ompi_infoはあなたのシステムに出力し、サポートされているかどうかを確認します。

関連する問題