2012-07-10 106 views
1

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

/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
  1. 开放式MPI非常适合基于网络和节点拓扑来猜测BTL的正确列表,因此通常不需要明确指定它。
  2. 指定由Torque/PBS创建的hosts文件的路径。如果进行相应编译,Open MPI支持与Torque/PBS紧密集成(通过tm模块),并且不需要指定主机文件和MPI进程数。

鉴于你的代码看起来并没有超过4个MPI进程。在单台机器上,它的运行速度比8个进程慢4个。这可能是由于内存带宽饱和或由于高通信与计算比率(通常意味着您的问题规模太小)所致。如果不显示更多的代码,很难判断哪一个是垃圾,但我可以猜测它是后者。 TCP具有非常高的延迟,尤其是与以太网等慢速网络结合时。

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