2011-11-30 138 views

回答

13

是的,命名的通話將努力設置線程的親和力。唯一的問題是修復線程號並在正確的線程中設置正確的關聯(您可以嘗試使用已知數量的線程的for循環的靜態調度)。

據我所知,幾乎每個openmp都允許通過環境設置親和力。環境變量的名稱各不相同(前一段時間沒有標準化)。 我使用http://www.spec.org/omp2001/results/omp2001.html頁面來查找openMP實現,並且將搜索特定的環境變量名稱。親和力設置在specOMP結果的一半左右。結果中還有一些額外的OpenMP性能調整設置。

例如For intel compiler變量是

export KMP_AFFINITY=compact,0 

For sun compiler:

export SUNW_MP_PROCBIND=TRUE 

For gcc (pre-openmp 3.1)

export GOMP_CPU_AFFINITY=0-63 

其中63最大CPU數目(從0開始計數時)

而且newer OpenMP Standard, version 3.1定義環境變量OMP_PROC_BIND(見secti 4.4),這是在OpenMP中設置親和性的標準方式。用法是:

export OMP_PROC_BIND=true 
+0

謝謝!在語言層面上沒有任何東西,比如'pthread_attr_setaffinity_np'? –

+0

不,openmp標準沒有線程綁定的附註或函數。唯一的方法(也是推薦的一種)是通過環境變量,編譯器特定或openmp3.1綁定線程。在啓動main之前,應儘早完成此設置。 – osgx

+0

所以,嚴格來說,你的答案應該以「否」開頭:) –