boost::mpi

トップページ > 並列/並行処理 >

abstract

必要なヘッダ
<boost/mpi.hpp>
出来ること
MPIのC++ラッパ
リファレンス
en

sample

#include <iostream>
#include <boost/mpi.hpp>
#include <boost/serialization/string.hpp>
using namespace std;

int main( int argc, char* argv[] )
{
	boost::mpi::environment  env(argc, argv); // MPI_Init 的なもの
	boost::mpi::communicator world;           // MPI_COMM_WORLD 的なもの

	if( (world.rank()&1) == 0 )
	{
		// MPI_Send 的なもの
		// 偶数番プロセスから奇数番プロセスにメッセージ送信
		// stringのようなオブジェクトでも、Boost.Serialization でシリアライズされて通信されます
		world.send( world.rank()^1, 0, string("Hello") );
	}
	else
	{
		// MPI_Recv 的なもの
		// 奇数番プロセスではメッセージ受信
		string msg;
		world.recv( world.rank()^1, 0, msg );
		cout << msg << " @ " << world.rank() << endl;
	}
}

出力

> mpirun -localonly 8 sample.exe
Hello @ 7
Hello @ 5
Hello @ 1
Hello @ 3

etc

並列計算用のメッセージ通信インターフェイス MPI を C++ でラップしたライブラリです。 使用するためには、具体的な MPI の実装 (MPICHOpenMPI など)が別途必要です。 MPICH2 では手元の環境ではうまく動かず…。

サンプルを見ていただければわかるように、非常に素直なラッパーになっているので、 MPI を使ったことのある方ならすぐ慣れることができると思います。

ビルド方法

Boost.MPI は Boost のデフォルトのビルド方法ではビルドされません。 手順の概略を Boost.MPI Getting Started から抜粋します。

0. なにか MPI の実装をインストール

1. tools/build/v2/user-config.jam を編集して

using mpi ;

と1行追加。ただし、mpicc コマンドがないMPI実装の場合これだけではビルドできないので、 代わりに明示的に

using mpi : : <find-shared-library>mpich <find-shared-library>mpe ;

などのようにリンクするライブラリ名を指定する必要があるそうです。

3. 以下のように --with-mpi をつけて Boost をビルド

bjam --toolset=msvc link=shared,static release debug stage --with-mpi

これでビルド完了です。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0