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

arm*_*ndo 0 c c++ fortran openmpi fortran90

我想hist(1:1000)在使用OpenMPI的不同处理器上调用相同的数组,这样当一个处理器修改时,hist这个修改在其余的处理器中更新.

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

是否可以使用OpenMPI执行此操作?

mgi*_*son 6

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

以此为例

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

(你想要的操作可能是MPI_SUM)