我希望hist(1:1000)
使用 OpenMPI 在不同的处理器上调用相同的数组,这样当一个处理器修改hist
此修改时,其余处理器中就会更新。
我已经编写了代码并声明hist(1:1000)
了但问题是hist
在每个处理器上独立更新,然后我所做的是将数据发送到“主节点”以便根据从站的信息更新另一个直方图,但这是我不想要什么。我想在每个处理器上更新相同的直方图。
是否可以使用 OpenMPI 做到这一点?
据我所知,MPI 不可能做到这一点。MPI 的目的是实现从一个进程到另一个进程的消息传递(因此得名——消息传递接口)。如果你想使用共享内存,最好的办法是使用 OpenMP 之类的东西(我认为它可能在那里?),它至少受到 gcc/gfortran 和可能许多其他编译器的支持。你可以使用线程......但是,最终,这些都不能扩展到像 MPI 这样的 1000 个处理器。根据你在做什么,你可以尝试 MPI 的集体操作——正如你所提到的, hist 正在存储一个直方图,所以你可能只想要你正在使用的所有 hist 的总和,而你的计算实际上并不依赖于历史。MPI 可以在更改所有数组后为您求和...
例如看这个
http://mpi.deino.net/mpi_functions/MPI_Allreduce.html
(你想要的操作大概是MPI_SUM)
我不完全了解您的应用程序,但您可能对 MPI_Bcast 函数感兴趣,它将向您的所有处理器广播一个数组。但是,使用大量 MPI_Bcast 通常不是一个好主意,因为很长一段时间将用于通信而不是处理。
您可以在单向通信的帮助下与其他人共享一个进程上的数组。然而,这被许多人视为次优解决方案。也许你会更好,重新考虑你的算法并尝试更多地按照消息传递范式来制定它。