我在集群上使用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'选项发送到节点外部的通信。我理解正确吗?
我知道在不知道应用程序的情况下很难判断,但我要求进行一般参数调整,这应该与应用程序无关。
答案 0 :(得分:1)
tm
模块),并且不需要既不指定hosts文件也不指定MPI进程数。鉴于您的代码似乎没有超过4个MPI进程。它在8个进程中比在单个机器上运行速度慢4。这可能是由于内存带宽饱和或由于高通信与计算比率(通常意味着您的问题规模太小)。如果没有显示更多代码,很难分辨出哪一个是culprint,但我可以猜测它是后者。 TCP具有非常高的延迟,特别是当与以太网等慢速网络耦合时。
根据算法的结构,我会建议您在某些类型的网络上学习预测这种不良行为,然后我会建议您使用一些MPI分析或跟踪工具来调查您的程序的行为。有关此类工具的列表,请参阅this question。