1
假设我有3个过程具有以下阵列:多个进程可以使用MPI_Scatter吗?
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,或者所有进程都可以并行调用它?
谢谢。
显然,我一直在寻找的是MPI_Alltoall(..),但似乎我仍然无法得到它的工作正常。 – ali 2013-04-21 16:43:16