【问题标题】:MPI and 2-socket node nonuniform memory accessMPI 和 2-socket 节点非统一内存访问
【发布时间】:2015-02-16 02:05:42
【问题描述】:

我使用一个包含多个节点的集群。它们每个都有 2 个处理器,内部有 8 个内核。我将 Open MPI 与 SLURM 一起使用。

我的测试表明 MPI 发送/接收数据传输速率如下:在具有等级 0 的 MPI 进程和 MPI 进程 1 之间约为 9 GB/秒,但在进程 0 和进程 2 之间为 5 GB/秒。我认为这是因为我们的进程在不同的处理器上执行。

我想避免非本地内存访问。我发现here 的建议没有帮助。所以问题是,是否可以在同一个处理器上运行 8 个 MPI 进程?如果是 - 我该怎么做?

谢谢。

【问题讨论】:

    标签: c memory mpi hpc


    【解决方案1】:

    mpiexec 的以下命令行选项集应该适用于 1.7 之前的 Open MPI 版本:

    --by-core --bind-to-core --report-bindings
    

    最后一个选项将漂亮地打印每个等级的实际绑定。绑定还会激活共享内存 BTL 模块中的一些 NUMA 感知。

    从 Open MPI 1.7 开始,进程在可用套接字上循环分发,并默认绑定到单个内核。要复制上述命令行,应使用:

    --map-by core --bind-to core --report-bindings
    

    【讨论】:

    • 谢谢,正是我想要的!
    【解决方案2】:

    这似乎是可能的。 OpenMPI mpirun 手册页的 Process Binding 和 Rankfiles 部分看起来很有希望。我会尝试使用 --report-binding 选项集显示的一些选项,以便您可以验证进程放置是您想要的方式,并查看您是否从代码中获得了预期的性能改进。

    【讨论】:

      【解决方案3】:

      您应该查看 MPI 库的 hostfile / rankfile 文档。 Open MPI 和 MPICH 都使用不同的格式,但都可以满足您的需求。

      请记住,如果您过度订阅您的处理器,您将会遇到性能问题。在 8 核处理器上运行超过 8 个等级将导致您失去从本地共享内存中获得的性能优势。

      【讨论】:

        【解决方案4】:

        使用 Slurm,设置:

        #SBATCH --ntasks=8
        #SBATCH --ntasks-per-socket=8
        

        在正确配置 Slurm 的情况下,将所有内核分配在同一个插槽(CPU 芯片)上。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-06
          • 2010-12-30
          • 2023-04-03
          • 1970-01-01
          • 2019-01-21
          • 2016-07-06
          • 1970-01-01
          • 2015-06-28
          相关资源
          最近更新 更多