分散在 mpi [一个非常简单的代码]

scatter in mpi [a very simple code]

这里是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;
}

我想要输出如下:

1 from rank 0
2 from rank 1
3 from rank 2
...

但是我得到了

1 from rank 0
0 from rank 1
0 from rank 2
0 from rank 3
0 from rank 4
...

MPI_Scatter()是集体行动,必须由所有通讯员队伍调用。

去掉 if (rank == 0) 你会没事的。

请注意,在您的示例中,a 发送缓冲区足够小,不会导致任何挂起。