2013-04-21 87 views
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,或者所有进程都可以并行调用它?

谢谢。

+0

显然,我一直在寻找的是MPI_Alltoall(..),但似乎我仍然无法得到它的工作正常。 – ali 2013-04-21 16:43:16

回答

0

事实上,我一直在寻找的是MPI_Alltoall(..)

很显然,我试图做的是很容易与MPI_Alltoall(..)进行

任何人谁具有同样的问题可以看看于:Hiestro Liev's answer

为了完整起见:

散射是用于一个进程值发送到所有其它的进程:

P0- {1, 2, 3} 
P1 
P2 

散射后:

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

而且,在分散操作的“根”的参数应该是所有的处理相同的,因为这意味着在根部位置阵列散射到所有其它过程。在上面的例子中,该值是0

(国大VAARNAN DROLIA的赞语)

相关问题