2014-09-05 20 views
0

我有一個MPI程序,用於創建一個文件,每次迭代都有一定的計算時間。當我運行這段代碼而沒有提交隊列時(這個集羣運行SGE),它會在幾秒鐘內給出以下時間。我用mpirun -np8抓住了8個處理器。提交到隊列後,MPI程序的計時發生了顯着變化

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 

如果有人能指出我可能會導致此問題,我將不勝感激?

回答

2

在您的第一種情況下(運行此代碼而不提交隊列),您可能在同一節點上運行8個進程。現在通常很好:你可能有8個內核。

嘗試了這一點:

$ /opt/openmpi/bin/mpirun -np 8 uname -a 

弄來8個相同的行?

在SGE的情況下,你可能會得到8臺物理機器,所以現在有網絡通信。如上所述確認。我不知道SGE,但是您的環境無疑具有「如何分配mpi進程」開關,以指示您是否希望它首先分配第一個或第一個寬度。

+0

我試過$/opt/openmpi/bin/mpirun -np 8 uname -a。當我在命令行上運行它時,我得到了8條相同的線。但是,當我嘗試提交隊列時,我得到了8條不同的線。似乎它運行在8個不同的主機上。 – Madisz 2014-09-10 15:10:11

+0

好吧,你去了:你的命令行在一臺機器上執行,進程通過共享內存或非常快的本地環回來交換消息。您的隊列提交請求了8個節點並遍佈這8個節點。沒有什麼不對的 - 你可以通過這種方式擴展到更高水平的並行性 - 但這就是發生了什麼。 – 2014-09-10 15:41:09

相關問題