2015-06-09 70 views
0

我對LSF非常新穎。我有4個節點,每個節點有2個插座。每個節點有8個核心。我開發了混合MPI + OpenMP代碼。我提交的工作如下,要求每個核心執行一項MPI任務。所以我失去了OpenMP的力量。LSF上的MPI + OpenMP作業提交腳本

##BSUB -n 64 

我希望讓每個插座運行一個MPI任務,而不是每個內核,以便在插槽內的內核可用於OpenMP的提交作業。如何構建作業提交腳本以優化代碼中的雜交功能。

回答

0

首先,BSUB哨兵前必須有一個#符號,否則它們會作爲常規評論跳過。

使用較早的LSF版本啓動混合作業的正確方法是單獨傳遞span資源請求和請求節點。要開始使用8個MPI進程和8個OpenMP的線程每一個工作,你應該使用下列內容:

#BSUB -n 8 
#BSUB -x 
#BSUB -R "span[ptile=2]" 

的參數如下:

  • -n 8 - 要求8個插槽MPI進程
  • -x - 專門請求節點
  • -R "span[ptile=2]" - 指示LSF跨越每個節點兩個插槽的作業

您應該專門請求節點,否則LSF會將其他作業安排到相同節點,因爲每個節點只使用兩個插槽。

然後,您必須將OMP_NUM_THREADS環境變量設置爲4(每個套接字的內核數),告訴MPI庫將該變量傳遞給MPI進程,並使該庫將每個MPI進程限制爲其自己的CPU套接字。這是非常不幸的是實現特定的,如:

開放MPI 1.6.x版或以上:

export OMP_NUM_THREADS=4 
mpiexec -x OMP_NUM_THREADS --bind-to-socket --bysocket ./program.exe 

開放MPI 1.7.x或更新:

export OMP_NUM_THREADS=4 
mpiexec -x OMP_NUM_THREADS --bind-to socket --map-by socket ./program.exe 

英特爾MPI(不知道這一個,因爲我不經常使用IMPI):

mpiexec -genv OMP_NUM_THREADS 4 -genv I_MPI_PIN 1 \ 
     -genv I_MPI_PIN_DOMAIN socket -genv I_MPI_PIN_ORDER scatter \ 
     ./program.exe