这是mpi scatter的代码:
#include <stdio.h>
#include <mpi.h>
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[1];
int main(int argc, char *argv[]) {
int rank;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Barrier(MPI_COMM_WORLD);
if(rank ==0){
MPI_Scatter(a,1,MPI_INT,b,1,MPI_INT,0,MPI_COMM_WORLD);
}
MPI_Barrier(MPI_COMM_WORLD);
printf("\n%d from rank=%d\n",b[0],rank);
MPI_Finalize();
return 0;
}
我想要输出如下:
等级0的1 2级来自1级 3级来自2级 ...
但我得到了
等级0的1 排名第1的0 排名第2的0 0从排名3 0等级4 ...
答案 0 :(得分:2)
MPI_Scatter()
是一个集体操作,因此必须通过所有调用通信器的行列。
摆脱if (rank == 0)
,你会没事的。
请注意,在您的示例中,a
发送缓冲区足够小,不会导致任何挂起。