1

我在一个集群上使用 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”选项发送到节点外部的通信。我理解正确吗?

我知道在不了解应用程序的情况下很难分辨,但我要求进行一般参数调整,它应该独立于应用程序。

4

1 回答 1

1
  1. Open MPI 非常擅长根据网络和节点拓扑猜测正确的 BTL 列表,因此通常您不需要明确指定它。
  2. 您指定 Torque/PBS 创建的 hosts 文件的路径。如果相应地编译,Open MPI 支持与 Torque/PBS 的紧密集成(通过tm模块),并且不需要指定主机文件或 MPI 进程的数量。

鉴于您的代码似乎无法扩展到超过 4 个 MPI 进程。它在一台机器上运行 8 个进程比使用 4 个进程要慢。这可能是由于内存带宽饱和或由于高通信计算比(通常意味着您的问题规模太小)。如果不显示更多代码,很难判断哪个是罪魁祸首,但我可以大胆猜测它是后者。TCP 具有非常高的延迟,尤其是在与以太网等慢速网络结合使用时。

随着时间的推移,人们会根据算法的结构学会在某些类型的网络上预测这种不良行为,但是我建议您使用一些 MPI 分析或跟踪工具来调查程序的行为。有关此类工具的列表,请参阅此问题。

于 2012-07-11T13:04:31.947 回答