OpenMPI + Boost MPI

ID: 8
creation date: 2010/02/26 13:44
modification date: 2010/03/10 23:10
owner: taiji
tags: C, C++, MPI, Boost

Boost MPI から OpenMPI を使うとき、以下のように mpic++ でコンパイルすればよい。

$ mpic++ -L/opt/local/lib -lboost_mpi -lboost_serialization -o mpi00 mpi00.cc

これは以下のように g++ でコンパイルするのと同じである。

$ g++ `mpic++ -showme:compile` -L/opt/local/lib -lboost_mpi -lboost_serialization `mpic++ -showme:link` -o mpi00 mpi00.cc

とりあえず動かしてみるには:

$ mpirun -np 4 ./mpi00

(2010/03/10補足) いくつかのマシンで動かしてみるには:

$ mpirun -host mitsuha,kurao,ubagami -np 4 ./mpi00

この場合、すべてのマシンについて、同一のパスに同名のプログラムがあり、SSHが通る必要があり、また、ファイアーウォールの設定を見直す必要(Leopardではortedの受信接続を許可、TigerではTCPポート49152-65535を許可)がある。

ところで、OpenMPI をビルド&インストールするには `configure --prefix=/opt/local && make && sudo make install` で特に問題ない。一方、Boost は MPI は標準では有効になっていないので、`emacs tools/build/v2/user-config.jam` で以下の一行を追加する。

using mpi ;

あとは bjam --prefix=/opt/local && sudo bjam --prefix=/opt/local install のように通常通りビルド&インストールすればよい(--with-mpi は不要)。

(2010/03/10追記) OpenMPI のユニバーサルバイナリを構築する目的でクロスコンパイルしようとすると、

/usr/bin/ld: Undefined symbols:
_lt_libltdlc_LTX_preloaded_symbols
collect2: ld returned 1 exit status

とエラーとなってしまってビルドできない。解決策は不本意ながら、`configure --disable-dlopen` ぐらいしか見つからなかった。これだと MCA DSO が無効となる。

0 コメント
ゲストコメント認証用なぞなぞ:
キーボードのLから左に全部打って下さい。それを二回やって下さい。 ...