问题:是否有可能,如果是,那么如何获取我的mpi作业在给定时刻运行的核心列表?
列出已分配作业的节点很容易,但是在花了几个小时调查互联网之后,我开始怀疑slurm以任何方式暴露核心列表(为什么它不会很难?)。
问题是,我想仔细检查我正在处理的集群是否真的在节点,核心(如果可能的话,套接字)中传播我的工作流程,正如我要求它做的那样(如果你的话,叫我偏执狂会)。
请注意,hwloc不是我的问题的答案,我问是否有可能从slurm获取此信息,而不是从我的程序内部获取此信息(如果你愿意,请叫我好奇)。
密切相关(但绝对不相同)答案 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 ...