c++ - 在 Windows 上使用 MPI 时在进程之间共享数据

标签 c++ windows mpi shared-memory

我已经进行了大量测试,试图在两个 MPI 主机上的多个独立运行的程序之间使用名为共享内存的窗口。结果是具有管理员权限的 MPI 没有 Windows 权限来访问全局\共享内存。

如果 MPI 要启动 EXE,它们是否会被视为子进程,Windows 会允许对它们进行内存访问吗?

其中一个进程包含DirectX,直接将DirectX合并到MPI程序中似乎很麻烦,因此我将它们保留为独立的EXE。

以前在 Intel 的表格上询问过 Intel MPI 的 windows 特权,但尚未找到解决方案。 ( https://software.intel.com/en-us/forums/intel-clusters-and-hpc-technology/topic/635157 ) 在这里以更一般的方式询问,看看是否还有我找不到的其他方法。

仍在寻找解决方案:

  • 为使用 mpiexec 运行的程序获得 windows 权限
  • 使用 mpiexec 运行 Direct3D 应用

决定使用 WinSockets 似乎很有前途。

最佳答案

MPI 如何启动进程是高度实现和配置定义的。任何假设都会导致程序的可移植性差。显然,您甚至不能假设这些进程是在同一节点上启动的。

我认为没有理由不将 MPI 合并到 DirectX 程序中。保持单独的 exe(尽管都使用 MPI)的一种解决方案是依赖 MPMD。

参见 OpenMPI FAQ ,这对于 IntelMPI 或 MPICH 应该类似地工作:

mpirun -np 2 app.exe : -np 1 dx-app.exe

然后使用 MPI 通信器将不同类型的进程和普通 MPI 设施分开以进行通信(例如 MPI-3 RMA,如果您不需要消息)。

您甚至可以使用 MPI_COMM_SPAWN/MPI_COMM_CONNECT 进行内部通信,但我认为您描述用例的方式没有什么好处。

关于c++ - 在 Windows 上使用 MPI 时在进程之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37640458/

相关文章:

c++ - vector 增长时如何强制执行 move 语义?

ruby-on-rails - VSCode 将调试 shell 更改为 Windows 上的 bash

c++ - 仅允许垂直窗口调整大小的最简单方法是什么?

windows - 如何使用 vba 更改扩展文件属性

fortran - 如果使用不是直接从 MPI_COMM_WORLD 创建的组,则 Fortran MPI_COMM_CREATE_GROUP 中的段错误

linux - ubuntu安装mpich时添加路径

c++ - 我需要 C++ 中的模数

c++ - 高效处理为redis(hiredis)的SET命令创建模板

c++ - MPI_Isend 之后 MPI_Wait 的确切行为是什么?

c++ - std::remove 不是从 std::vector 中移除