我對LSF非常新穎。我有4個節點,每個節點有2個插座。每個節點有8個核心。我開發了混合MPI + OpenMP代碼。我提交的工作如下,要求每個核心執行一項MPI任務。所以我失去了OpenMP的力量。LSF上的MPI + OpenMP作業提交腳本
##BSUB -n 64
我希望讓每個插座運行一個MPI任務,而不是每個內核,以便在插槽內的內核可用於OpenMP的提交作業。如何構建作業提交腳本以優化代碼中的雜交功能。
我對LSF非常新穎。我有4個節點,每個節點有2個插座。每個節點有8個核心。我開發了混合MPI + OpenMP代碼。我提交的工作如下,要求每個核心執行一項MPI任務。所以我失去了OpenMP的力量。LSF上的MPI + OpenMP作業提交腳本
##BSUB -n 64
我希望讓每個插座運行一個MPI任務,而不是每個內核,以便在插槽內的內核可用於OpenMP的提交作業。如何構建作業提交腳本以優化代碼中的雜交功能。
首先,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