Parallel processing 如何在不接触其他内核的情况下停止将多个作业分配给同一内核的运行

Parallel processing 如何在不接触其他内核的情况下停止将多个作业分配给同一内核的运行,parallel-processing,mpi,Parallel Processing,Mpi,我是一个新手,我遇到了一个小问题。我有n个作业,我只想在我的机器的2个内核上运行,所以我打开n个终端窗口并使用通常的 mpirun-np2[程序] 在每个终端窗口中,但不是使用2*n个内核,而是只使用其中的一小部分,而且应用程序速度非常慢,这让我相信mpirun是在同一个内核上堆叠多个作业,而不接触同一CPU上的其他内核,这使得作业速度慢得令人无法忍受,总体上降低了工作流效率 我试过使用这个选项 --绑定到核心 在每次调用中,但这似乎并没有改变mpirun的任何行为 是什么导致了这种行为?我如何

我是一个新手,我遇到了一个小问题。我有n个作业,我只想在我的机器的2个内核上运行,所以我打开n个终端窗口并使用通常的
mpirun-np2[程序]
在每个终端窗口中,但不是使用2*n个内核,而是只使用其中的一小部分,而且应用程序速度非常慢,这让我相信mpirun是在同一个内核上堆叠多个作业,而不接触同一CPU上的其他内核,这使得作业速度慢得令人无法忍受,总体上降低了工作流效率

我试过使用这个选项
--绑定到核心
在每次调用中,但这似乎并没有改变mpirun的任何行为

是什么导致了这种行为?我如何解决它,使它不会在相同的内核上堆叠作业,直到没有足够的内核来满足需求


非常感谢

当运行2 MPI任务作业时,Open MPI的默认行为是--bind to core

这里的问题是,从终端启动的MPI作业是独立的,它们都将task 0固定在cpu 0上,task 1固定在cpu 1上,因此它们最终共享前两个内核的时间

一个较小的缺点是
——绑定到none
,以防止openmpi绑定MPI任务,并让Linux调度程序使用所有可用的内核。由您来确保在任何给定时间内运行的MPI任务都不会超过核心(否则您将返回分时)

正确的修复方法是使用SLURM之类的作业调度器,它将确保任何给定的内核在任何给定时间运行的MPI任务不超过一个

手动解决方案是手动将每个MPI作业限制为两个核心

$ taskset -c 0,1 mpirun -np 2 a.out
$ taskset -c 2,3 mpirun -np 2 a.out
...

但两份工作之间不共享任何核心部分仍取决于您。

非常感谢您的努力!我以前尝试过安装SLURM workload manager(因为它已经在我工作时使用的超级计算机上运行了,所以我作为用户已经习惯了),但是在VM上安装它对于像我这样不熟悉作业调度器的人来说太难了哈哈哈!再次感谢您的帮助,当我有更多的空闲时间时,我会再次尝试使用作业调度器:)如果您运行的是RedHat(like)发行版,SLURM RPM现在可以从EPEL获得。遗憾的是,不,我运行的是Ubuntu 20.04 LTS!我找到的所有导游都是18岁以上的。。。