我有一个 32 核的虚拟机。
我正在运行一些模拟,需要同时使用 16 个内核。
我使用以下命令在 16 个核心上运行作业:
mpirun-n 16程序名 args> 注销2>&1
该程序在 16 个内核上运行。
现在,如果我想在其余核心上使用不同的参数运行相同的程序,我可以使用相同的命令,例如
mpirun-n 8程序名 差异参数> log_1.out 2>&1
第二个进程使用与之前相同的 16 个内核。
如何使用 mpirun 在 8 个不同的内核上运行此进程,而不是第一个作业使用的前 16 个内核。
我使用的是无头 Ubuntu 16.04。
Open MPI 的启动器支持通过以下方式限制 CPU 设置--cpu-set
选项。它接受一组表示为以下形式的列表的逻辑 CPUs0,s1,s2,...
,其中每个列表条目是一系列 CPU 的单个逻辑 CPU 编号n-m
.
假设您的虚拟机中的逻辑 CPU 是连续编号的,您需要做的是:
mpirun --cpu-set 0-15 --bind-to core -n 16 program_name args > log.out 2>&1
mpirun --cpu-set 16-23 --bind-to core -n 8 program_name diff_args > log_1.out 2>&1
--bind-to core
告诉 Open MPI 将进程绑定到每个单独的内核,同时尊重中提供的 CPU 集--cpu-set
争论。
使用诸如以下的工具可能会有所帮助lstopo
(的一部分hwloc
Open MPI 库)来获取系统的拓扑,这有助于选择正确的 CPU 编号,例如防止绑定到超线程,尽管这在虚拟化环境中意义不大。
(注意lstopo
使用令人困惑的命名约定并调用操作系统逻辑CPUphysical,因此查找中的数字(P#n)
条目。lstopo -p
隐藏hwloc
逻辑数并防止混淆。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)