MPI_Allgather をテストしていて、奇妙な結果が得られました... 次のコードは、「P0 を受け取りました: 0,42,-1780253336,42」という出力を与えます。唯一の正しい結果は 1 番目の結果です。これは、全員がランクを送信しているためです。出力は次のようになります: "0, 1, 2, 3,". なぜこれが期待どおりに機能しないのか、私は途方に暮れています。
int main(int argc, char* argv[])
{
int rank = 0;
int size = 0;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int* arr = new int[4];
MPI_Allgather(&rank, 1, MPI_INT, arr, 4, MPI_INT, MPI_COMM_WORLD);
if(rank == 0)
{
printf("P0 received: ");
for(int i=0; i< 4; i++)
printf("%i,", arr[i]);
printf("\n");
}
delete arr;
MPI_Finalize();
}