【问题标题】:Physical location of the processes assigned by the MPI run-time systemMPI 运行时系统分配的进程的物理位置
【发布时间】:2012-03-13 10:50:09
【问题描述】:

当我们在集群上使用 mpirun -np 4 a.out 命令启动 MPI 程序时,然后 MPI 运行时系统如何跨 CPU 分配进程?

我的意思是,假设它在集群中找到一个空闲的四核 CPU,它会在该 CPU 上运行所有 4 个进程,还是会找到 4 个 CPU 并运行 4 个进程,每个 CPU 有 1 个进程?

这是否取决于 MPI 的特定实现?

我是否应该被 MPI 为我选择的特定配置所困扰(一个 CPU 上的 4 个进程或 4 个 CPU 上的每个 CPU 1 个进程)

【问题讨论】:

    标签: mpi


    【解决方案1】:

    是的,这取决于 MPI 实现,是的,这很重要。例如,如果您希望能够为每个 MPI 任务使用一个节点的内存,而您发现自己在单个节点上加载了 4 个任务,而在其他节点上什么也没有,那么您将遇到严重的问题。同样,如果您在 4 个 8 核节点上运行,并且您正在运行 4 个 mpi 任务,每个任务有 8 个 OpenMP 线程,那么对于 4 个节点中的每一个节点使用 1 个任务和 8 个线程,或 4 个任务和 32 个线程之间存在很大差异在一个节点上,其他节点上没有。

    x86 类型硬件上最常见的 MPI 实现是基于 OpenMPI 或 MPICH2 的。 OpenMPI 会在进入下一个节点之前填满一个节点;你可以改变这种行为,例如,给它“--bynode”选项,它将一个任务分配给一个节点,下一个任务分配给下一个节点,等等,并根据需要再次环绕到第一个节点。 (OpenMPI 还具有 --bysocket 和 --bycore 用于更精细的控制,以及非常有用的 --display-map 选项,它可以准确地向您显示正在发生的事情)。

    对于基于 mpich2 的 MPI,您可以为其指定“循环”的 -rr 选项,这将在节点之间循环(例如,OpenMPI 的 --bynode 行为)。

    在任何一种情况下,在 linux 类型的系统上,您始终可以运行 eg 'mpirun -np 4 hostname' 作为一种快速而肮脏的方式来找出您的 mpirun 命令将在哪些主机上启动进程。

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2011-05-13
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 2012-11-03
      • 2011-04-07
      • 1970-01-01
      相关资源
      最近更新 更多