我已经做了大量的测试,试图在两个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)在更广泛的意义上问这里,看看是否还有其他方法,我无法找到。
仍在寻找解决方案:
决定与WinSockets合作似乎很有希望。
答案 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
的交流者,但我认为你描述用例的方式没什么好处。