MPI_Isendをランダムな宛先に送信するのに問題があります。宛先をハードコーディングすると正常に機能しますが、ランダムに生成しようとすると機能しません。関連するコードは次のとおりです。
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
srand48(myid);
request=MPI_REQUEST_NULL;
if(myid == 0){
buffer=drand48();
do {
destination=lrand48() % numprocs;
} while (destination == 0); //Prevent sending to self
MPI_Isend(&buffer,1,MPI_DOUBLE,destination,1234,MPI_COMM_WORLD,&request);
}
else if (myid == destination) {
MPI_Irecv(&buffer,1,MPI_DOUBLE,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&request);
}
if(myid == 0){
printf("processor %d sent %lf to %d\n",myid,buffer,destination);
}
else {
printf("processor %d got %lf\n",myid,buffer);
}
私はうまくコンパイルすることができます私が出力でmpicc main.c
プログラムを実行するときmpirun -np 4 ./a.out
:
processor 0 sent 0.170828 to 2
processor 1 got 0.000000
processor 2 got 0.000000
processor 3 got 0.000000
たとえば、宛先を2としてハードコーディングすると、期待どおりの出力が得られます。
processor 0 sent 0.170828
processor 1 got 0.000000
processor 2 got 0.170828
processor 3 got 0.000000