我最近开始尝试用C语言学习MPI。我正在尝试编写非常小的测试代码,以确保我知道自己在做什么。不幸的是,我似乎遇到了其中一个问题,它将矩阵与向量相乘并输出结果向量。具体来说,当我打电话时:
MPI_Reduce(c, myc, 3, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
其中myc是由每个处理器计算的向量的一部分,我的最终结果是对于所有i,c [i] = 0。计算myc的代码是正确的(使用一个处理器检查并输出myc而不是c)。我假设我在这里做了一些非常愚蠢的事情,但无法弄清楚是什么。
答案 0 :(得分:2)
所以你希望答案在c
而不是myc
?
语法为:
int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm)
所以您要将c
发送到myc
并附上您的示例。
另请注意,recvbuf
仅在根节点上有效,在您的情况下是节点0.所有其他节点在recvbuf
中都有垃圾。