C++でOpenMPI入門1 ランク

おもむろにOpenMPIに取り組んでみようと思う. FortranC言語でも情報が散逸しているのが現状のようだが, C++となると基本は同じとは言え, いまいちよくわからん.

というわけで, ここにサンプルを示しながら, 勉強していきたい. サンプルはここに従って試していこうととりあえず考えています.

http://apollon.issp.u-tokyo.ac.jp/~watanabe/pdf/mpinote.pdf

といっても, 僕はOpenMPIについてはド素人なので間違った事を書くかもしれない. コードについては一応手元で実行してからここに記すようにはしています.

OpenMPIの関数名のFortran, C言語, C++での対応関係は以下のサイトをみると便利.

http://www.lam-mpi.org/tutorials/bindings/

#include <iostream>
#include <mpi.h>

int main(int argc, char **argv)
{
    MPI::Init(argc, argv);

    int rank = MPI::COMM_WORLD.Get_rank();
    std::cout << "My rank = " << rank << std::endl;

    MPI::Finalize();
}

まずは基本中の基本, 自分のランクを出力するだけのプログラム.

$ mpic++ test1.cpp
$ mpirun -np 4 ./a.out
My rank = 2
My rank = 3
My rank = 1
My rank = 0

何度か実行すると, 出力される順番がまちまちなのに気がつくはずです.

C言語ではMPI_Finalize()となっているのが, C++ではMPI::Finalize()のようになります. が, C++でもMPI_Finalize()も普通に使えます. 実際問題, MPI::Finalize()のように書かなければいけない積極的な理由も無いような気もするんだけれど.