打开 MPI 4.0 内核和内存绑定

Open MPI 4.0 core and memory binding

我需要一些关于如何使用 Open MPI 4.0.1 实现我想要的核心和内存绑定的提示。 这是针对具有 8 个 NUMA 节点和 64 个内核的单个计算节点,即 2x AMD Epyc 7551,禁用 SMT。

此系统上的内核根据以下方案编号:

现在我想到了 3 种不同的绑定策略,我们称它们为 "close"、"spread" 和 "scatter"。我将为每个具有 6,16 和 48 个线程的示例提供 3 个示例,以阐明我的想法(希望如此)。但是我需要使用 1 到 64 之间任意数量的 MPI 线程的方法。

1: "close" 这里的想法是让线程尽可能接近,即最小化内核延迟。

2: "spread" 想利用所有可用的内存带宽

3: "scatter" 这背后的想法是,每个 NUMA 节点再次分为 2 组,每组 4 个核心,每个组都有自己的 L3 缓存。与 "spread" 相比,此策略应最大化每个线程可用的 L3 缓存量。

我需要将哪些参数传递给 mpirun 才能实现这 3 个策略中的每一个?或任何其他方法,如果这不能在没有帮助的情况下实现,例如机器文件。

我没有测试它的硬件,所以我不能保证这是正确的答案

  • "close" mpirun --bind-to core --rank-by core --map-by core ...
  • "spread" mpirun --bind-to core --rank-by core --map-by numa ...
  • "scatter" mpirun --bind-to core --rank-by core --map-by l3cache ...

您还可以mpirun --report-bindings ...查看 MPI 任务是如何被 Open MPI 固定的。