打开MPI 4.0内核和内存绑定

打开MPI 4.0内核和内存绑定,mpi,numa,Mpi,Numa,我需要一些关于如何使用OpenMPI4.0.1实现我心目中的核心和内存绑定的提示。 这适用于具有8个NUMA节点和64核的单个计算节点,即2x AMD Epyc 7551,SMT禁用 该系统上的磁芯按照以下方案进行编号: 现在我想到了3种不同的绑定策略,我们称它们为“关闭”、“扩展”和“分散”。我将给出3个例子,每个例子有6、16和48个线程,以明确我的想法(希望如此)。但是我需要能够处理1到64之间任意数量的MPI线程的方法 1:“关闭”这里的想法是让线程尽可能靠近,即最小化核心延迟。 2

我需要一些关于如何使用OpenMPI4.0.1实现我心目中的核心和内存绑定的提示。 这适用于具有8个NUMA节点和64核的单个计算节点,即2x AMD Epyc 7551,SMT禁用

该系统上的磁芯按照以下方案进行编号:

现在我想到了3种不同的绑定策略,我们称它们为“关闭”、“扩展”和“分散”。我将给出3个例子,每个例子有6、16和48个线程,以明确我的想法(希望如此)。但是我需要能够处理1到64之间任意数量的MPI线程的方法

1:“关闭”这里的想法是让线程尽可能靠近,即最小化核心延迟。

2:“扩展”,目的是利用所有可用的内存带宽

3:“分散”这背后的想法是,每个NUMA节点再次划分为2组,每组4个核心,其中每个组都有自己的L3缓存。与“扩展”相比,此策略应最大限度地增加每个线程可用的三级缓存量


为了实现这3个策略中的每一个,我需要将哪些参数传递给mpirun?或任何其他方法,如果没有机器文件等的帮助无法实现此功能。

我没有硬件来测试它,因此我不能保证这是一个正确的答案

  • “结束”
    mpirun--绑定到核心--按核心排序--按核心映射…
  • “蔓延”
    mpirun--绑定到核心--按核心排序--按numa映射…
  • “分散”
    mpirun--绑定到核心--按核心排序--按缓存映射…

您还可以
mpirun--report bindings…
查看打开的MPI是如何固定MPI任务的。

至少对于分散和分散来说,这并不能完全起作用。每个等级仍然分配了一系列的核心,而不是一个单一的核心。map by l3cache似乎不知道每个芯片中L3缓存的分段,将一个列组分配给整个8核组。有没有一种不同的偏移量方法可以让我们在不依赖OpenMPI的情况下完全控制体系结构?在所有情况下,您都需要绑定到核心。我也使用了这种方法。尽管如此,每个列组的绑定都报告为一系列核心,而不是单个核心如果
--bind to core
报告每个MPI列组有多个核心(而不是超线程),那么您肯定应该向Open MPI邮件列表或。请注意,这可能与
hwloc
有关,甚至与您的Linux内核有关。糟糕的是,我错过了您上次编辑的全部要点,并将bind与rank混淆了。谢谢