我已经进行了大量测试,试图在两个 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/