使用mpi.h,如何使用mpi.h的MPI_Altoallv为每个处理器发送4个以上的整数?

时间:2011-10-17 19:39:59

标签: c mpi

在C中使用mpi.h,有4个处理器,每个处理器分配了8个元素的缓冲区(整数),以及6个元素的另一个数组(p)。 我以一种包含越来越多的数字序列的方式初始化每个处理器的每个p数组(处理器0有0,1,2,3,4,5;处理器2有6,7等等)。 现在我想使用MPI_Alltoallv在一个唯一的数组(缓冲区)中发送每个矩阵,但由于matric是4x6,我想向处理器0发送8个元素,向处理器1发送8个元素,向处理器2发送4个元素处理器3的4个元素。 所以我试着在我的代码中这样做,我链接:

http://pastebin.com/EgGt6Asz

但是它无法实现我想做的事情:它只是在缓冲区中接收一个4x4矩阵,忽略索引大于4的元素。

1 个答案:

答案 0 :(得分:0)

根据alltoallv的specification
sendcounts整数数组等于指定要发送到每个处理器的元素数量的组大小

所以你应该为每个处理器设置不同的发送缓冲区 说

if (myid==0)
send[]=[6,0,0,0]
if(myid==1)
send[]=[2,4,0,0]
if(myid==2)
send[]=[0,4,2,0]
if(myid==1)
send[]=[0,0,2,4]

和相应的位移数组。

if (myid==0)
disp[]=[0,0,0,0]
if(myid==1)
disp[]=[0,2,0,0]
if(myid==2)
disp[]=[0,0,4,0]
if(myid==1)
disp[]=[0,0,0,2]

目前,您已将每个值设置为1,因此所有处理器从每个处理器获得1个值。因此总共有4个值。