Intel MKL 多線程設置


對於多核程序,多線程對於程序的性能至關重要。 下面,我們將對Intel MKL 有關多線程方面的設置做一些介紹:

我們提到MKL 支持多線程,它包括的兩個概念:
1>MKL 是線程安全的: MKL在設計時,就保證它是一個線程安全的庫函數。 也就是說,無論是在單個線程中調用MKL函數,還是在多個線程中同時使用Intel MKL 函數,都能夠確保函數有正確的計算結果。

2>MKL函數內部實現了多線程優化。許多MKL的函數,已經包括內部多線程的實現。用戶調這些函數時,只需設置多線程的數目,MKL 函數的內部,就可以同時進行多個線程的並行計算。 Intel MKL 還提供了一個單線程版本的庫函數,這個版本中,每個函數只運行串行代碼。 我們需要在鏈接的時候,需要選擇鏈接串行(單線程)的MKL函數,還是並行(多線程)的MKL 的函數。 下面我們提到的多線控制的方法,主要是針對的並行的MKL函數庫。

那么,在MKL 的多線程庫中, 如何設置MKL 多線程的數目呢? Intel MKL 使用了OpenMP實現了多線程,所以OpenMP的環境變量與API對MKL 的多線程設置仍然有效。 除了OpenMP的方法外,MKL還提供了,其它的設置多線程的環境變量與API:

環境變量 對應的API 說明 對於的OMP的變量
MKL_NUM_THREADS mkl_set_num_threads 建議MKL 函數使用的多線程的數目。. OMP_NUM_THREADS
OMP_NUM_THREADS omp_set_num_threads OpenMP提供的多線程設置的環境變量與API.  
MKL_DYNAMIC mkl_set_dynamic 建議MKL根據計算問題,自動設置多線程的數目,線程數目不超過用戶設定的線程的上限 OMP_DYNAMIC

需要說明的是,Intel MKL 提供的多線程設置的方法,優先級要高於OpenMP的方法。 比程序中,同時設置了下面的環境變量:
>export MKL_NUM_THREADS =1
>export OMP_NUM_THREADS =4
此時,程序中,MKL的函數將會運行一個線程。

關於多線程的設置,我們還需要注意下面的3個問題:
第一,在超線程的機器上,Intel MKL 多線程的設置: 在系統中,當多個線程的執行不同的操作,CPU有空閑資源時,多線程技術有較好的執行效果。Intel MKL的計算核心已經經過充分優化,並且這些計算的核心都執行類似的計算操作,所有多線程的設置,對於MKL 不能提供很好的幫助。 如果在程序執行的機器上, 超線程的設置已經打開, 一個推薦的做法是,設置MKL 的線程為系統核的數目(邏輯處理器數目的一半),並設置下面的threading affinity 的環境變量:
KMP_AFFINITY=granularity=fine,compact,1,0.

第二,MKL_DYNAMIC 環境變量: 這個環境變量確定是否由Intel MKL 來選擇計算的線程的數目, 但是總的線程數不會超過MKL_NUM_THREADS與OMP_NUM_THREADS的值。 Intel MKL會根據實際計算問題的大小,以及多線程對計算是否有效等諸多情況,選擇適合的線程數目,這也是缺省的Intel MKL 多線程設置方式。

如果用戶手動設置MKL_DYNAMIC=FALSE, Intel MKL 將根據用戶指定的線程數目,設置計算線程。 比如,設置:
MKL_DYNAMIC=FALSE
MKL_NUM_THREADS=6
MKL函數將運行6個計算線程,盡管對某些小的計算問題,6個線程可能並不是最有效的。

第三,並不是所有MKL函數都是多線程。 某些計算函數,多線程並不能給程序帶來性能提升,如Level 1 BLAS,其主要計算瓶頸是數據訪問,這樣的函數,內部多線程,不能帶來很大幫助。 具體的MKL 多線程的函數列表, 可以查看用戶手冊。

有關多線程這方面的,進一步的參考文檔: 
MKL 用戶手冊:http://software.intel.com/sites/products/documentation/hpc/mkl/mkl_userguide_lnx/index.htm
相關文章:
http://software.intel.com/en-us/forums/showthread.php?t=67622
http://software.intel.com/en-us/articles/intel-math-kernel-library-intel-mkl-intel-mkl-100-threading/
http://software.intel.com/en-us/articles/setting-thread-affinity-on-smt-or-ht-enabled-systems/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM