Ton*_*nyR 4 parallel-processing mpi
我是 mpirun 的新手,我遇到了一个小问题。我有 n 个作业,只想在机器的 2 个核心上运行,因此我打开 n 个终端窗口并
mpirun -np 2 [program]
在每个终端窗口中使用常用的终端窗口,但它不是使用 2*n 个核心,而是只使用其中的一小部分,并且应用程序非常慢,让我相信 mpirun 正在同一核心上堆叠多个作业,而不会触及同一 CPU 上的其他核心,从而使作业速度慢得难以忍受,并总体上降低了工作流程效率...
我尝试
--bind-to core
在每次调用中使用该选项,但这似乎并没有改变 mpirun 的行为......
可能是什么导致了这种行为,我该如何解决它,以便它不会在相同的核心上堆叠作业,直到没有足够的核心来满足需求?
多谢!
Open MPI 的默认行为是--bind-to core运行 2 个 MPI 任务作业时。
这里的问题是,从终端启动的 MPI 作业是独立的,它们都将任务 0 固定在 cpu 0 上,将任务 1 固定在 cpu 1 上,因此它们最终会共享前两个核心的时间。
一个较小的危害是--bind-to none阻止 Open MPI 绑定 MPI 任务,并让 Linux 调度程序使用所有可用的内核。您需要确保在任何给定时间运行的 MPI 任务数量都不会超过内核数量(否则您将返回分时)。
正确的解决方法是使用作业调度程序(例如 SLURM),这将确保任何给定核心在任何给定时间运行不超过一个 MPI 任务。
手动解决方案是将每个 MPI 作业手动限制为两个核心
$ taskset -c 0,1 mpirun -np 2 a.out
$ taskset -c 2,3 mpirun -np 2 a.out
...
Run Code Online (Sandbox Code Playgroud)
但您仍然可以决定不要在两项工作之间共享任何核心。