我想在使用 OpenMPI 的不同处理器上使用名为 hist(1:1000)
的同一个数组,这样当一个处理器修改 hist
时,此修改会在其余的处理器。
我写了一段代码并声明了hist(1:1000)
但问题是hist
在每个处理器上独立更新,那么我要做的就是发送数据到“主节点”,以便根据从节点的信息更新另一个直方图,但这是我不想要的。我想在每个处理器上更新相同的直方图。
是否可以使用 OpenMPI 执行此操作?
最佳答案
据我所知,MPI 无法实现此类事情。 MPI 的目的是实现从一个进程到另一个进程的消息传递(因此得名——消息传递接口(interface))。如果你想使用共享内存,你最好的选择是使用像 OpenMP 这样的东西(我认为它可能在那里?)它至少被 gcc/gfortran 和可能许多其他编译器支持。您可以使用线程……但是,最终,这些都无法像 MPI 那样扩展到 1000 个处理器。根据你在做什么,你可以尝试 MPI 的集体操作——正如你提到的, hist 正在存储一个直方图,所以你可能只想要你正在使用的所有 hists 的总和,你的计算实际上并不依赖于历史。 MPI 可以在更改后为您对所有数组求和...
例如看这个
http://mpi.deino.net/mpi_functions/MPI_Allreduce.html
(你要的操作大概是MPI_SUM)
关于c++ - 如何使用 MPI 在不同的处理器上使用相同的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10114449/