C 中数组的 MPI_Reduce

wol*_*k88 3 c mpi

我最近开始尝试学习 MPI 以用 C 进行编码。我正在尝试编写非常小的测试代码,以确保我知道自己在做什么。不幸的是,我似乎对其中一个有问题,它将矩阵与向量相乘并输出结果向量。具体来说,当我打电话时:

MPI_Reduce(c, myc, 3, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)

其中 myc 是每个处理器计算的向量的一部分,我的最终结果是对于所有 i,c[i] = 0。计算 myc 的代码是正确的(使用一个处理器进行检查并输出 myc 而不是 c)。我想我在这里做了一些非常愚蠢的事情,但不知道是什么。

tpg*_*114 5

所以你想要你的答案c而不是myc

语法是:

int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
           MPI_Op op, int root, MPI_Comm comm)
Run Code Online (Sandbox Code Playgroud)

所以你正在发送cmyc的例子。

另请注意,recvbuf仅在根节点上有效,在您的情况下是节点 0。所有其他节点都将在 中包含垃圾recvbuf

  • 我们都去过了,不用担心! (7认同)