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

时间:2017-06-16 14:47:08

标签: mpi cluster-computing hpc slurm

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

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

问题是,我想仔细检查我正在处理的集群是否真的在节点,核心(如果可能的话,套接字)中传播我的工作流程,正如我要求它做的那样(如果你的话,叫我偏执狂会)。

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

other similar question

密切相关(但绝对不相同)

1 个答案:

答案 0 :(得分:1)

嗯,这取决于您的MPI库(基于MPICH,基于Open MPI,其他),如何运行MPI应用程序(通过mprun或通过srun直接启动)和SLURM配置。

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

如果你mpirun,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 ...