3

バックグラウンド

こんにちは、みんな、

Boost :: MPIを使用しようとしていますが、現時点では、チュートリアルの簡単な最初の例を実行しようとしています。ビルド/実行に問題があります。

apt-getを使用してboostをインストールし、synapticパッケージマネージャーを使用してboost_mpiとboost_serialization(1.48.0)をインストールしました。apt-getを使用してMPICH2をインストールしました。

OpenMPIが明示的にインストールされたことがない場合でも、これは私のシステムにあるように見えますが、これはBoost :: MPIの依存関係であると思いますが、MPICH2とOpenMPIはお互いの足を踏み入れているようです。

情報

を使用してビルドする場合

g++ test.cpp -I/usr/include/mpich2 -L/usr/lib -lboost_mpi -lboost_serialization

次に、を使用して実行します

mpiexec -n 2 ./a.out

それはOpenMPIから来ているように見えるたくさんのエラーを投げます。を使用してOpenMPIライブラリに対してリンクしてビルドしようとすると

g++ test.cpp -L/usr/lib -lboost_mpi -lboost_serialization -lmpi -I/usr/include/openmpi

次のエラーが発生します。

/usr/bin/ld: /tmp/ccJ5ezv7.o: undefined reference to symbol 'ompi_op_set_cxx_callback'
/usr/bin/ld: note: 'ompi_op_set_cxx_callback' is defined in DSO /usr/lib/libmpi.so.0 so try adding it to the linker command line
/usr/lib/libmpi.so.0: could not read symbols: Invalid operation

mpic++次のコマンドを使用してビルドしようとすると

mpic++ test.cpp -lboost_mpi -lboost_serialization

フォームのエラーの束を返すことはリンクされません

 /usr/lib/libmpich.so: undefined reference to `MPL_trid'

だから私はlibmpiに対してリンクしてみました

mpic++ test.cpp -lboost_mpi -lboost_serialization -lmpi

これはビルドされますが、実行するmpiexecと次のエラーが発生します

Fatal error in PMPI_Errhandler_set: Invalid communicator, error stack:
PMPI_Errhandler_set(118): MPI_Errhandler_set(comm=0x370500, errh=0x370be0) failed
PMPI_Errhandler_set(70).: Invalid communicator

質問

どういうわけか、OpenMPIとMPICH2は、本来あるべきではない場所で絡み合っているように思われます。OpenMPIまたはMPICH2のみに対してビルドし、正しい方法で実行する方法を知っている人はいますmpiexecか?

4

1 に答える 1

1

異なるMPIライブラリに対してコンパイルされたコードの混合は、一般的にサポートされていません。Boost ::MPIがOpenMPIに対してリンクされている場合は、アプリケーションの残りの部分でOpenMPIを使用する必要があります。

mpic++他のコンパイララッパーとすべてのヘッダーファイルを取得するには、 OpenMPIの-devパッケージをインストールする必要があります。ライブラリが依存関係としてインストールされている場合は、ランタイム部分のみが存在します。

于 2012-05-24T17:04:41.230 に答える