如何使用 MPI 在不同的处理器上使用相同的阵列

How to use the same array on different processors using MPI

本文关键字:阵列 处理器 何使用 MPI      更新时间:2023-10-16

我希望在使用OpenMPI的不同处理器上具有名为hist(1:1000)的相同数组,这样当一个处理器修改hist此修改时,此修改会在其余处理器中更新。

我已经编写了一段代码并声明了hist(1:1000)但问题是hist在每个处理器上独立更新,那么我所做的就是将数据发送到"主节点",以便根据从属信息更新另一个直方图,但这是我不想要的。我想在每个处理器上更新相同的直方图。

是否可以使用 OpenMPI 做到这一点?

据我所知,MPI 不可能做到这一点。 MPI 的目的是实现从一个进程到另一个进程的消息传递(因此得名 -- 消息传递接口)。 如果你想使用共享内存,你最好的选择是使用像OpenMP这样的东西(我认为那里可能是可能的?),至少gcc/gfortran和许多其他编译器都支持它。 您可以使用线程...但是,最终,这些都没有像MPI这样的处理器扩展到1000个处理器。 根据你正在做的事情,你可以尝试MPI的集体操作 - 正如你提到的,hist存储直方图,所以你可能只想要你正在使用的所有hist的总和,你的计算实际上并不依赖于hist。 MPI 可以在更改后为您汇总所有数组...

例如,请参阅此内容

http://mpi.deino.net/mpi_functions/MPI_Allreduce.html

(您想要的操作可能MPI_SUM)

我不完全了解您的应用程序,但您可能对MPI_Bcast函数感兴趣,它会将数组广播到所有处理器。但是,使用大量MPI_Bcast通常不是一个好主意,因为很长时间将用于通信而不是处理。

您可以在单边通信的帮助下与其他进程共享一个进程上的数组。然而,许多人认为这是一个次优的解决方案。也许你会更好,重新思考你的算法,并尝试更多地按照消息传递范式来表述它。