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

时间:2018-01-14 14:05:11

标签: c mpi

这是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   ...

1 个答案:

答案 0 :(得分:2)

MPI_Scatter()是一个集体操作,因此必须通过所有调用通信器的行列。

摆脱if (rank == 0),你会没事的。

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