我有一个具有2D本地数组(cval)的代码。这个本地数组由每个处理器计算,最后我调用MPI_ALLREDUCE将此本地数组求和为全局数组(gns)。 这个本地阵列对于不同的处理器有不同的大小。我做全部缩减的方式如下
k = n2spmax- n2spmin + 1 ! an arbitrary big value
do i = nmin, nmax
call MPI_ALLREDUCE(cval(i,:),gns(i,:),k,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierr)
end do
这是写它的正确方法。我不确定吗?
答案 0 :(得分:1)
不,你不能这样做。 MPI_Allreduce要求通信器中的所有进程都贡献相同数量的数据。这就是为什么有一个计数参数。
为了更好地指导正确的方法,我们需要更清楚地了解您要做的事情。你是在计算gns(i,j)= cval(i,j)所有等级的总和,但并非所有等级都有cval(i,j)s吗?