集群上的openMPI命令

时间:2012-07-10 22:54:26

标签: openmpi

我在集群上使用openMPI-1.6,它有8个节点,每个节点有8个核心。我正在使用此命令来运行我的应用程序。

/path/to/mpirun --mca btl self,sm,tcp --hostfile $PBS_NODEFILE -np $num_core /path/to/application

我已经进行了实验并获得了以下数据。

num node | num core per node | total core | exe time of application |
    1              2                2                8.5 sec
    1              4                4                5.3 sec
    1              8                8                7.1 sec

    2              1                2                11 sec
    2              2                4                9.5 sec
    2              4                8                44 sec //this is too slow

正如您所看到的,最后一行(2个节点,8个核心)的执行时间比其他行慢得多。我假设使用多个节点的开销,但我没想到这种指数降级。

所以,我的问题是,在使用多个节点的群集上运行作业时,是否缺少任何openMPI性能参数?我假设mca btl self,sm,tcp参数自动使用共享内存选项进行节点内部的通信,并使用'tcp'选项发送到节点外部的通信。我理解正确吗?

我知道在不知道应用程序的情况下很难判断,但我要求进行一般参数调整,这应该与应用程序无关。

1 个答案:

答案 0 :(得分:1)

  1. Open MPI非常擅长根据网络和节点拓扑猜测正确的BTL列表,因此通常不需要明确指定它。
  2. 指定Torque / PBS创建的hosts文件的路径。如果相应编译,Open MPI支持与Torque / PBS紧密集成(通过tm模块),并且不需要既不指定hosts文件也不指定MPI进程数。
  3. 鉴于您的代码似乎没有超过4个MPI进程。它在8个进程中比在单个机器上运行速度慢4。这可能是由于内存带宽饱和或由于高通信与计算比率(通常意味着您的问题规模太小)。如果没有显示更多代码,很难分辨出哪一个是culprint,但我可以猜测它是后者。 TCP具有非常高的延迟,特别是当与以太网等慢速网络耦合时。

    根据算法的结构,我会建议您在某些类型的网络上学习预测这种不良行为,然后我会建议您使用一些MPI分析或跟踪工具来调查您的程序的行为。有关此类工具的列表,请参阅this question