2017-10-21 137 views
0

我編程上的騎士登陸,其具有68芯和4個超線程/核心節點。我正在研究混合MPI/OpenMP應用程序。 我的問題是,如果4個超線程意味着用作OpenMP的 線程或者我如何使用他們?當我運行使用 以下方案我的程序:可用線程着陸

export OMP_NUM_THREADS=1 
mpirun -np 68 ./app 

它的運行速度比當我使用的方案更快:

export OMP_NUM_THREADS=4 
mpirun -np 68 ./app 

也許問題是,對於一個特定的MPI線程不接近 彼此。但是,我不知道該怎麼做。

總之,我可以使用4個超線程/芯作爲OpenMP的線程?

謝謝。

+0

在絕大多數的應用程序,也就會跑這麼多線程,同時運行在每個核心的MPI排名沒有用。英特爾MPI的默認設置應該是將本地線程放置在線程中,但首先驗證您的OpenMP在單個MPI等級上顯示增益,使用2或4個內核,然後嘗試可能的等級和線程數組合。 – tim18

+0

關於如何設置親和力的細節因​​MPI實現而異,但針對KNL的MPI應包含該功能。 – tim18

+0

我還沒有足夠的經驗與knl說,一個應用程序使用多於1個線程每個內核有效可能會在所有內核使用前達到峯值。在knc上,mpi可能會保持核心繁忙的消息傳遞以及另一個正在運行的os和mpi。 – tim18

回答

0

正如你可能使用英特爾MPI和OpenMP運行時,請允許我轉發你提供有價值的信息的一些鏈接的釘扎MPI和OpenMP線程到處理器核心/線程。過程/線程綁定是當今實現高性能所必需的。即使操作系統試圖盡最大努力,將一個進程/線程從一個內核/線程移動到另一個位置也意味着數據也需要傳輸。對於這個問題,看看Running an MPI/OpenMP ProgramEnvironment Variables for Process Pinning。例如,如果您以68個MPI排名運行,那麼您可能會開始將每個MPI排名放入不同的核心。您可以通過設置I_MPI_DEBUG環境變量(如here所述)來仔細檢查mpirun是否正在履行您的請求。