c++ - 如何使用 MPI 在不同的处理器上使用相同的数组

标签 c++ c fortran fortran90 openmpi

我想在使用 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/

相关文章:

c++ - 编译器提示 volatile 关键字

python - 在嵌入式 PyQt 应用程序中使用 QThread

c - 如何在使用 C 时找出 Linux 中的剩余堆栈

c - 在驱动程序中安全处理用户空间指针?

arrays - 我的 Fortran 代码遇到奇怪的问题

linker - 堡垒: error #10037: could not find 'link'

c++ - void 方法和 lambda 中的常量正确性 'trick'

c++ - 为什么 getline(cin, string_name) 在我第一次在循环中使用它时会创建一个空字符串?

c - 禁用 Code::Blocks 中的编译和链接?

performance - 测量每行花费的时间,fortran