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

时间:2016-06-05 09:40:14

标签: c++ windows mpi shared-memory

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

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

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

以前在英特尔的表格中询问过英特尔MPI的Windows权限,但尚未找到解决方案。 (https://software.intel.com/en-us/forums/intel-clusters-and-hpc-technology/topic/635157)在更广泛的意义上问这里,看看是否还有其他方法,我无法找到。

仍在寻找解决方案:

  • 获取使用mpiexec
  • 运行的程序的Windows权限
  • 使用mpiexec
  • 运行Direct3D应用程序

决定与WinSockets合作似乎很有希望。

1 个答案:

答案 0 :(得分:1)

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的交流者,但我认为你描述用例的方式没什么好处。