2006-01-17
_ [IT][MPI] プロセスとI/O
MPI_Init:MPIを使うときに、最初に唱える呪文。
MPI_Finalize:MPIを使い終わったときに唱えなければならない呪文。
MPI_Comm_rank:自分のプロセスのランク(rank)を知るための関数。
MPI_Attr_get:属性が定義されているかどうかを調べる関数。
MPI_IO:定義済みの属性キー。属性の内容は、次のように関連付けられている。
・MPI_ANY_SOURCE・・・すべてのプロセスでI/Oが使用できる。
・MPI_PROC_NULL・・・I/Oは使用できない。
・上記以外の値を持つ場合は、その値がI/Oを使用できるプロセスのランクを意味する。
#include <stdio.h> #include <mpi.h> main(int argc, char **argv) { int nprocs, rank; int *attr; int flag; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Attr_get(MPI_COMM_WORLD, MPI_IO, &attr, &flag); if(flag) { if(*attr == MPI_ANY_SOURCE) { printf("Rank %d may use I/O\n", rank); } else if(*attr == MPI_PROC_NULL) { /* I/Oは使えない */ } else { /* *attrで示されるランクでI/Oが使える */ } } MPI_Finalize(); }
実行結果。
SCOUT: Spawning done. SCore-D 5.7.0 connected. <0:0> SCORE: 8 nodes (4x2) ready. Rank 1 may use I/O Rank 7 may use I/O Rank 3 may use I/O Rank 0 may use I/O Rank 4 may use I/O Rank 5 may use I/O Rank 6 may use I/O Rank 2 may use I/O SCOUT: Session done.
参考文献:「Linuxで並列処理をしよう―SCoreで作るスーパーコンピュータ」(共立出版)