我有一个MPI程序,它创建一个文件,每次迭代一定数量的计算时间。当我在不提交队列的情况下运行此代码(此集群运行SGE)时,它会以秒为单位给出以下时间。我使用mpirun -np8
抓取了8个处理器。
STEP ITIME
-------------
1 0.868128
2 0.426714
3 0.409768
4 0.427312
5 0.412737
6 0.413256
7 0.414480
8 0.414984
9 0.415683
10 0.416826
但是当我为8个处理器提交相同数量的工作并将其提交到队列时,程序会花费更多时间来计算迭代次数。每步的时间几乎是四倍。
STEP ITIME
-------------
1 3.189155
2 1.594365
3 1.600892
4 1.589424
5 1.605402
6 1.589136
7 1.599425
8 1.591966
9 1.601557
10 1.603447
以下bash脚本用于提交作业。
#!/bin/sh
#$ -S /bin/bash
#$ -pe orte 8
export PATH=~:$PATH
/opt/openmpi/bin/mpirun -np 8 ./exec
如果有人可以指出可能导致此问题的原因,我将不胜感激?
答案 0 :(得分:2)
在第一种情况下(运行此代码而不提交队列),您可能在同一节点上运行8个进程。现在通常很好:你可能有8个核心。
试试这个:
$ /opt/openmpi/bin/mpirun -np 8 uname -a
你有8条相同的线吗?
在SGE情况下,您可能会获得8台物理机,因此现在涉及网络通信。如上确认。我不知道SGE,但你的环境无疑有一个"如何分配mpi进程"切换以指示您是否希望它首先分配深度或宽度。