1対1通信と対となる通信は集団通信があります。
その通信で行えることは多種多様です。
今回はその手法の一つで「ブロードキャスト」を説明します。
この方法はあるPCの値を全PCで共有させるための処理です。
たとえば以下のようにします。
#include<stdio.h>
#include"mpi.h"
#include<stdlib.h>
#include<unistd.h>
#include<time.h>
int main(int argc,char *argv[])
{
int rank,size;
int mynum=0;
int myerr=0;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
srand(time(NULL)+rank);
if(rank == 0)★★★
mynum = rand();★★★
printf("hello world I'm %d of %d my number is %d\n",rank,size,mynum);★★★
sleep(3);
myerr = MPI_Bcast(&mynum,1,MPI_INT,0,MPI_COMM_WORLD);★★★
printf("hello world I'm %d of %d my number is %d (err No. is %d)\n",rank,size,mynum,myerr);★★★
MPI_Finalize();
return 0;
}
で、コンパイルして実行してみます。
$ mpicc -o 005-1 ./005-1.c
$ mpirun --machinefile ../machinefile ./005-1
hello world I'm 0 of 3 my number is 1943796139
hello world I'm 1 of 3 my number is 0
hello world I'm 2 of 3 my number is 0
hello world I'm 0 of 3 my number is 1943796139 (err No. is 0)
hello world I'm 2 of 3 my number is 1943796139 (err No. is 0)
hello world I'm 1 of 3 my number is 1943796139 (err No. is 0)
…というように各ノードに値が伝播していることがわかりますね。
このような関数がMPIにはいっぱいあります。