【问题标题】:Sharing data between processes when using MPI on windows在 Windows 上使用 MPI 时在进程之间共享数据
【发布时间】:2016-10-05 01:25:44
【问题描述】:

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

如果 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 似乎很有希望。

【问题讨论】:

    标签: c++ windows mpi shared-memory


    【解决方案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 进行内部通信,但我认为您描述用例的方式没有什么好处。

    【讨论】:

    • 我在我的程序的 DirectX 部分中添加了足够的内容以使用 MPI 运行。当我使用“mpiexec -np 1 -localonly program.exe”启动时,它会弹出并运行。但是,当我不包含 -localonly 时,它只会挂在控制台窗口中,我可以使用 Windows 任务管理器在后台找到 program.exe。任何想法为什么会这样? (当我在控制台中启用调试时没有报告错误)
    • 对 hello-world-example 是否也有效?还是英特尔 MPI 吗?恐怕我对 Windows 上的 MPI 没有什么具体经验,但通常mpirun 有很多选项可以调试启动。
    • 以 hello world 为例,MPMD 测试完美运行。是的,它是英特尔 MPI。 -我能够使用 MPI 群集调试器将项目设置为在 VisualStudio 中运行,并在不仅使用本地时发现错误 DXGI_ERROR_NOT_CURRENTLY_AVAILABLE。根据仍在调查此问题的其他论坛,似乎 Direct3D 和远程操作存在问题。
    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多