c++ - 有没有办法使用 MPI 在并行进程上共享内存?

标签 c++ parallel-processing mpi

在我的 C++ 应用程序中,我应该每次都在进程之间共享信息。它使用 MPI_Send 和 MPI_Recv 运行良好,但在我的工作中,当相互发送/接收消息时,进程形成的“同步障碍”是不必要的。即使使用 MPI_Isend 等类型,程序中也会有一段时间发生“同步障碍”。

找到的解决方案是将信息放在文件中(无需消息即可共享数据),以便进程可以获取/放置数据而无需等待另一个到达特定代码点。它也可以工作,但是它会使程序失去时间性能,而且这个想法恰恰相反。

因此,有一个内存空间(或方式)可以像上面描述的文件应用程序一样工作吗?不需要让进程通过消息进行通信并且安全吗?

PS:“同步屏障”我的意思是进程必须等待另一个进程发送/接收信息的时间。

最佳答案

是的,可以在不与 MPI 同步的情况下访问内存。这称为单向通信或 RMA(远程内存访问)。内存区域,称为窗口,必须显式地提供给它,例如使用 MPI_Win_create。使用 MPI_PutMPI_Get 等函数可以显式访问内存。请注意,它们中的每一个都是非阻塞的,并且数据移动必须显式同步。总的来说,有很多样板和陷阱,所以请尽量仔细阅读 Material 。

这里有更多 detailed introduction .

关于c++ - 有没有办法使用 MPI 在并行进程上共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44330509/

相关文章:

c++ - 是否可以更改C/C++中自动变量的分配区域?

c# - "run an instance in a separate Thread"最简单的方法是什么?

c - MPI,我更改了一个非常简单的程序以使用 INT 而不是 CHAR 作为消息缓冲区的数据类型,但现在它失败了,这是为什么?

c++ - 可以使用哪些技术来加快 C++ 编译时间?

c++11 - 使用 {} 构造函数直接从 char* 初始化 std::string

parallel-processing - 如何在pytorch中进行并行处理

msbuild - 如何在MSBuild中并行运行任务

runtime-error - mpiexec检查点错误(RPi)

linux - MPI 无法编译基准(对 `MPI_Type_extent' 的 undefined reference )

c++ - 这是boost库中的错误吗