我最近开始尝试学习 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)。我想我在这里做了一些非常愚蠢的事情,但不知道是什么。
所以你想要你的答案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)
所以你正在发送c你myc的例子。
另请注意,recvbuf仅在根节点上有效,在您的情况下是节点 0。所有其他节点都将在 中包含垃圾recvbuf。