MPI_Sendrecv 对 recvbuf 进行操作?

MPI_Sendrecv with operation on recvbuf?

我使用 MPI_Sendrecv MPI 函数在进程之间传递数据数组。我在 Python 中使用 mpi4py 执行此操作,但我很确定我的问题与使用的语言无关。

我真正想要的是将驻留在另一个进程上的数组添加到现有的本地数组中。这应该对所有进程完成,所以我使用 MPI_Sendrecv 函数一次性发送和接收数组。然后我可以将 recvbuf 中接收到的数组添加到本地数组,我就完成了。

不过,如果我可以省去拥有一个单独的 recvbuf 数组的步骤,并且直接将数据直接接收到本地数组 而不会覆盖现有数据,而是使用一些操作更新它(在我的例子中是添加)。

我想我要找的是 MPI_Sendrecv/MPI_Reduce 组合函数。 MPI 中有这样的功能吗?

MPI_Recvreduce 就是您要找的。不幸的是,它还不存在。 MPI 论坛一直在考虑将其添加到标准的未来版本中,但尚未被采用,也不会出现在即将推出的 MPI 3.1 中。