如何使用 MPI 在不同的处理器上使用相同的阵列
How to use the same array on different processors using MPI
我希望在使用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通常不是一个好主意,因为很长时间将用于通信而不是处理。
您可以在单边通信的帮助下与其他进程共享一个进程上的数组。然而,许多人认为这是一个次优的解决方案。也许你会更好,重新思考你的算法,并尝试更多地按照消息传递范式来表述它。
- #定义c-预处理器常量..我做错了什么
- 预处理器:插入结构名称中的前一个行号
- 如何在c++中实现处理器调度模拟器
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- C/C++预处理器是否可以检测一些编译器选项
- 当我的阵列太大时出现分段错误
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 在clang++预处理器中确定gcc工具链版本
- 不同/较旧的处理器运行c++代码的方式是否不同
- 位阵列上的快速AND运算
- 用于交叉编译和CMake的预处理器宏的单元测试
- 阵列必须使用大括号封闭的初始器进行初始化
- 有没有办法在从编译器获取参数时避免预处理器宏?
- 没有从阵列<float>到阵列<int>的可行转换
- 如何比较两个同名的预处理器宏?
- C++动态安全 2D 交错阵列
- 从预处理器获取 Windows 版本(C++ Win32)
- 预处理器阵列生成
- 如何使用 MPI 在不同的处理器上使用相同的阵列