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 が無効となる。