Last update: 2024/12/23
今回はMPIの練習として、参考文献[1]の第2章でFortranで書かれているMPIのコードをベースに以下の内容でコードを作成した。コードの作成にあたって参考文献[2]も参考にした。
#include <mpi.h>
#include <cstdio>
int main(int argc, char **argv) {
int myid, numprocs;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
printf("Hello MPI! Myid:%d\n", myid);
if(myid == 0) {
printf("Process number:%d\n", numprocs);
}
int err = MPI_Finalize();
printf("Finalize result:%d, id:%d\n", err, myid);
}
以下にポイントだけメモしておく。詳細は参考文献[3]を参照のOpenMPIの公式ドキュメントを参照。
上記のコードをhello_mpi.cppという名前で保存し、以下でコンパイルする。
$ mpic++ hello_mpi.cpp
まずは実行ファイルをそのまま実行してみる。
$ ./a.out
この方法だと並列実行はされないため、以下のように1プロセス分だけの結果が出力される。
Hello MPI! Myid:0
Process number:1
Finalize result:0, id:0
次に、並列実行してみる。mpirunに引数として並列数と実行プログラムを与えて実行することで、並列実行できる。今回は並列数を4にして実行した。
$ mpirun -np 4 ./a.out
以下が実行結果。4並列で実行しているため、4プロセス分の結果が出力されている。コードを見ればわかるように、全体のプロセス数についてはRankが0のプロセスでのみ表示させるようにしている。
Hello MPI! Myid:3
Hello MPI! Myid:2
Hello MPI! Myid:0
Process number:4
Hello MPI! Myid:1
Finalize result:0, id:2
Finalize result:0, id:3
Finalize result:0, id:1
Finalize result:0, id:0
[1] 下司雅章 編集/片桐孝洋,中田真秀,渡辺宙志,山本有作,吉井範行,JaewoonJung,杉田有治,石村和也,大石進一,関根晃太,森倉悠介,黒田久泰 著, "計算科学のためのHPC技術1", 2017, 大阪大学出版会
[3]Open MPI v5.0.x — Open MPI 5.0.x documentation
Copyright (c) 2024 kd