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

时间:2014-03-19 06:12:37

标签: c++ c multiprocessing mpi openmpi

我知道资源管理器(R.M。)将插槽信息传递给openmpi,但

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

    • myshell $ mpirun --host n1,n1,n1,n1,n1。/ a.out
    • myshell $ mpirun -np 5 --host n1 ./a.out
  3. 我的意思是在哪种情况下,我是"超额订购"节点?

2 个答案:

答案 0 :(得分:3)

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

这同样适用于启动MPI流程。在主机文件中描述主机时,每个主机的插槽数不一定必须与硬件配置相匹配。同样,这取决于MPI工作的性质。插槽信息通常用于控制如何分配排名。例如,Open MPI中的默认策略是填充第一个主机上提供的插槽,然后移动到下一个主机。填满所有主机后,如果还有更多等级要启动,则该过程将从主机列表中的第一个节点重新开始。

--host n1,n1,n1,n1,n1--host n1 -np 5的最终效果相同:在主机n1上启动了5个排名。不同之处在于Open MPI如何解释它。

  • mpiexec --host n1,n1,n1,n1,n1 ./a.out告诉Open MPI主机n1上有5个插槽。由于-np参数被省略,mpiexec每个定义的插槽开始一个排名,因此在主机n1开始了5个排名。
  • mpiexec --host n1 -np 5 ./a.out告诉Open MPI主机n1上有一个插槽。在n1上启动了一个排名。由于不再有剩余的时隙,mpiexec从第一个定义的时隙再次开始,即在主机n1上启动另一个等级。重复此操作,直到n1上的所有5个等级都被启动并导致超额认购。

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

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

答案 1 :(得分:0)

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

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

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