可以有多个进程使用MPI_Scatter吗?

时间:2013-04-21 15:36:58

标签: c parallel-processing mpi distributed-computing

假设我有3个进程具有以下数组:

P0 - int sendBuff[3] = {1,2,3};
P1 - int sendBuff[3] = {4,5,6};
P2 - int sendBuff[3] = {7,8,9};

假设每个流程都有int recvBuff[3];

我想将每个进程sendBuff分散到每个进程recvBuff中,所以我在主文件中有代码:

int rank, size, i;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

MPI_Scatter(&sendBuff[0], 1, MPI_INT, &recvBuff[0], 3, MPI_INT, rank, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
//print recvBuffs

但是,当我打印出recvBuff进程时,我得到:

recvBuff of P0:  1, -1077259864, 134517329
recvBuff of P1:  5, 6, 4
recvBuff of P2:  9, 7, 8

我不应该得到:

recvBuff of P0:  1, 4, 7
recvBuff of P1:  2, 5, 8
recvBuff of P2:  3, 6, 9

我感觉每个进程在每次调用MPI_Scatter时都会覆盖每个进程的recvBuff。

此外,一组进程中只有一个进程可以调用MPI_Scatter,还是所有进程都可以并行调用它?

谢谢。

1 个答案:

答案 0 :(得分:0)

事实上,我所寻找的是MPI_Alltoall(..)

显然,我尝试做的事情很容易用MPI_Alltoall(..)

完成

任何有相同问题的人都可以查看:Hiestro Liev's answer

为了完整起见:

Scatter是一个进程将值发送到所有其他进程:

P0- {1, 2, 3}
P1
P2

分散后:

P0-{1}
P1-{2}
P2-{3}

此外," root" Scatter操作中的参数对于所有进程应该是相同的,因为这意味着将根位置的数组分散到所有其他进程。在上面的示例中,该值为0.

(来自新加坡国立大学的VAARNAN DROLIA的赞美)