tetraの外部記憶箱

«前の日記(2006-01-16) 最新 次の日記(2006-01-18)» 編集
Category;

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で作るスーパーコンピュータ」(共立出版)

comment