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