我想使用MPI_Gather将数据发送到等级0.但我做错了什么:
int size;
int rank;
int i;
int b;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int* bb= new int[size];
//slave
if(rank!=0) {·
b=13;·
printf("slave %d \n", b);
// sleep(5);
MPI_Gather(&b,1,MPI_INT,bb,1,MPI_INT,0,MPI_COMM_WORLD);
}
//master
if(rank==0)
{
b=12;
printf("master %d \n", b);
for (i = 0; i < size; i++) {
printf("%d\t", bb[i]);
}
}
MPI_Finalize();
return 0;
我期待bb = [12,13]。你知道怎么做吗? 谢谢。
答案 0 :(得分:0)
主进程还必须调用MPI_Gather
。您应该将调用移出条件块:
//slave
if(rank!=0) {
b=13;
printf("slave %d \n", b);
}
else {
b=12;
printf("master %d \n", b);
}
// all
MPI_Gather(&b,1,MPI_INT,bb,1,MPI_INT,0,MPI_COMM_WORLD);
//master
if(rank==0)
{
for (i = 0; i < size; i++) {
printf("%d\t", bb[i]);
}
}