多处理器环境中主机和插槽的区别是什么?

what is the difference between host and slot in mulicore-multiprocessor environment?

本文关键字:区别 是什么 插槽 环境 主机 多处理器      更新时间:2023-10-16

我知道资源管理器(R.M.)向openmpi传递槽位信息,但是

  1. R.M.如何确定多核处理器中的插槽数量(1核总是= 1个插槽吗?)和
  2. 如果我在4核处理器上运行a.t out,那么它们之间的区别是:

    • myshell$ mpirun——host n1,n1,n1,n1 ./a
    • myshell$ mpirun -np 5——host n1 ./a.out

我的意思是,在哪种情况下,我是否"过度订阅"了节点?

对于资源管理器,例如SLURM、LSF、SGE/OGE、Torque等,插槽和内核之间的映射完全留给系统管理员。它通常取决于要在节点上执行的作业的性质。在HPC中,大多数任务都是cpu绑定的,通常的映射是每个内核(或每个硬件线程)一个插槽。在数据处理中,大多数任务都是I/O绑定的,拥有比内核更多的插槽可能更有益。

同样适用于启动MPI进程。在hostfile中描述主机时,每个主机的插槽数量不一定要与硬件配置匹配。同样,这取决于MPI作业的性质。槽位信息通常用于控制如何分配等级。例如,Open MPI中的默认策略是填充第一台主机上提供的插槽,然后移动到下一台主机。一旦所有的主机都被填满,如果还有更多的队列等待启动,进程将从主机列表中的第一个节点重新启动。

--host n1,n1,n1,n1,n1--host n1 -np 5的结束效应相同,在主机n1上启动了5个rank。不同之处在于Open MPI如何解释它。

  • mpiexec --host n1,n1,n1,n1,n1 ./a.out告诉Open MPI主机n1上有5个插槽。由于省略了-np参数,因此mpiexec在每个定义的槽位上启动一个rank,因此在主机n1上启动5个rank。
  • mpiexec --host n1 -np 5 ./a.out告诉Open MPI主机n1上只有一个插槽。一个等级在n1上线。由于没有剩余的插槽,mpiexec从第一个定义的插槽重新开始,即在主机n1上启动另一个rank。如此重复,直到n1上所有5个排名都被发布,并导致其被超额订阅。

请注意,仅从MPI库的角度来看,节点是超额订阅的——n1上提供了一个插槽,但它必须在那里开始5个排名。这与过度订阅节点本身无关,也就是说,可能有比5更多的CPU空闲内核。

当主机列表由资源管理器提供时,过度订阅节点是一个非常糟糕的主意,特别是因为一些或所有节点可能与其他作业共享。在这种情况下,建议使用--nooversubscribe选项,以防止mpiexec启动的排名超过授予的插槽。但是请注意,存在合理的超额订阅情况,例如,当节点被独占授予(不与其他作业共享)并且MPI作业是I/O密集型作业时。

您还可以指定每个主机上可用插槽的数量:

mpirun -np 5 --host n1:2,n2:3 ./a.out

将在n1上运行2个进程,在n2上运行3个进程。