如何使用 mpirun 分配核心

如何使用 mpirun 分配核心

我试图在具有 16 个核心的 VPS 上同时执行两个进程,我希望每个作业都利用 8 个核心并最大化可用核心的数量。

所以我想我可以像这样执行两个单独的进程:

$ mpirun -np 8 pmemd.MPI -O -i input_proc1.in -o output_proc1.out
$ mpirun -np 8 pmemd.MPI -O -i input_proc2.in -o output_proc2.out

在我看来,这会将进程 1 放在核心 1-8 上,将进程 2 放在核心 9-16 上,但显然情况并非如此。检查htop输出显示这两个进程都挤满了核心 1-8,导致 8 个核心未被利用。

我在后台运行这些命令,将一系列mpirun命令放入两个单独文件夹中的文件中,并按如下方式运行每个命令:

$ nohup ./runscript.sh < /dev/null > /dev/null 2>&1 &

在我注销后让它们在后台运行,因为我需要运行的每一系列进程可能需要几天才能完成。

我认为您应该能够以某种方式为一项任务“保留”8 个核心(1-8),然后在启动下一个任务时,该任务应该被迫使用剩余的 8 个核心,尽管我尚未设法使用以下方法实现所需的行为--bind-to选项。我不确定这是否与系统是 OpenStack VPS 机器有关,或者只是我做得不对。

我在运行 Ubuntu 18.04.2 LTS 的 Ubuntu VPS 上使用 mpirun (Open MPI) 2.1.1。

任何有关实现所需行为的反馈或建议将不胜感激

此致

答案1

因此,在深入研究之后,我找到了问题的答案堆栈溢出。出于我的目的,我apt-get安装了以下hwloc命令来映射可用的内核lstopo -p,然后运行我的命令:

$ nohup mpirun --cpu-set 0-7 --bind-to core -np 8 pmemd.MPI [arguments]
$ nohup mpirun --cpu-set 8-15 --bind-to core -np 8 pmemd.MPI [arguments]

这成功地将第一个任务分配给前 8 个核心,将第二个任务分配给其余 8 个核心,充分利用了所有可用的 16 个核心。

我想我也会在这里发布答案,以防将来有人偶然发现这个问题。

相关内容