是否有可能以及如何从 slurm 获取我的 mpi 作业 运行 所在的内核列表?

Is it possible and how to get a list of cores on which my mpi job is running from slurm?

问题:是否有可能,如果可以,那么如何在给定时刻获取我的 mpi 作业 运行 的 核心 列表?

列出作业分配到的节点很容易,但在调查互联网几个小时后,我开始怀疑 slurm 以任何方式公开核心列表(为什么不困难?)。

问题是,我想仔细检查我正在处理的集群是否真的按照我的要求将我的工作流程分散到节点、核心(如果可能的话,套接字)(叫我偏执狂)如果你愿意的话)。

请注意,hwloc 不是我问题的答案,我想问是否可以从 slurm 中获取此信息,而不是从我的程序内部获取此信息(如果你愿意,请叫我好奇)。

other similar question

密切相关(但绝对不是一回事)

好吧,这取决于您的 MPI 库(基于 MPICH、基于 Open MPI 等),取决于您如何 运行 您的 MPI 应用程序(通过 mpi运行 或通过 s 直接启动运行) 和您的 SLURM 配置。

如果您直接启动,SLURM 是可以进行绑定的那个。 srun --cpu_bind=verbose ... 应该报告每个任务是如何绑定的。

如果你 mpi运行,SLURM 只会在每个节点上生成一个代理。 对于 Open MPI,spawn 命令是 srun --cpu_bind=none orted ... 因此,除非 SLURM 配置为限制可用内核(例如,如果您配置了 cpuset 且节点未处于独占模式),则所有内核都可以由 MPI 任务使用。 然后由 MPI 库在可用内核中绑定 MPI 任务。

如果你想知道可用的内核是多少,你可以 srun -N $SLURM_NNODES -n $SLURM_NNODES --cpu_bind=none grep Cpus_allowed_list /proc/self/status

如果你想知道任务是如何绑定的,你可以 mpirun grep Cpus_allowed_list /proc/self/status

或者您可以要求 MPI 报告 iirc,你可以使用 Open MPI mpirun --report-bindings ...