rank と size

ではすこし考えてみましょう。MPIで何台PCを使用しているか、今このPCはMPIでどうやって認識されているか?というのを確認する術が欲しくなってきます。これがrankとsizeです。
では、実際にソースコードをいじってみましょう。

#include<stdio.h>
#include"mpi.h"
#define N 10000000

int main(int argc,char *argv[])
{
        int rank,size;★★★
        MPI_Init(&argc,&argv);
        MPI_Comm_rank(MPI_COMM_WORLD,&rank);★★★
        MPI_Comm_size(MPI_COMM_WORLD,&size);★★★
        printf("hello world I'm %d of %d\n",rank,size);★★★
        MPI_Finalize();
        return 0;
}

★★★が変更点です。
これをコンパイル→実行します。

$ mpicc -o 002-1 002-1.c 
$ mpirun --machinefile ../machinefile ./002-1
hello world I'm 0 of 3
hello world I'm 2 of 3
hello world I'm 1 of 3

さて、さっきと違い、3行示されました。これは、

  • rankに自分に付けられた通し番号、
  • sizeに全体でどの数のPCを使っているか

というのを格納したのです。ここで出てきているMPI_COMM_WORLDはあまり難しいことを考えずに、
「いまの処理で使用しているPC全体のグループ名」
という感じで認識しておけばよいかと思います。

戻る