我想要將OpenMP線程綁定到CPU。已經嘗試了兩種方法。第一個是sched_setaffinity
。每次線程分叉時,我調用sched_setaffinity
將OpenMP線程綁定到CPU。看來每次綁定都太昂貴了。是否真的需要每次綁定或綁定一次?第二個是GOMP_CPU_AFFINITY
。我設置了GOMP_CPU_AFFINITY=0-7
和OMP_NUM_THREADS=4
。兩個節點用於計算。每個節點有2個芯片,每個芯片有4個內核。我在每個節點放置一個進程,每個進程分叉4個線程。如果GOMP_CPU_AFFINITY
未設置,則OpenMP會加快該程序的速度。如果GOMP_CPU_AFFINITY
設置,以下是返回和OpenMP不起作用:OpenMP線程親和力與GOMP_CPU_AFFINITY和sched_setaffinity
OMP: Warning #123: Ignoring invalid OS proc ID 1.
OMP: Warning #123: Ignoring invalid OS proc ID 2.
OMP: Warning #123: Ignoring invalid OS proc ID 3.
OMP: Warning #123: Ignoring invalid OS proc ID 4.
OMP: Warning #123: Ignoring invalid OS proc ID 5.
OMP: Warning #123: Ignoring invalid OS proc ID 6.
OMP: Warning #123: Ignoring invalid OS proc ID 7.
輸出看起來好像OpenMP運行時將您的系統看作只有一個CPU。什麼編譯器和操作系統是什麼? – 2014-10-31 18:03:25
@HristoIliev我今天也得到了這個,Intel Fortran 14和GOMP_CPU_AFFINITY =「0-7:2」。奇怪的是,我正在經常使用這種設置,現在只是從家裏匆匆而過。 – 2014-11-01 20:57:45
@VladimirF,如果你的shell會話在cgroups容器內的某種程度上被限制在一個非常窄的CPU掩碼內,就可能發生這種情況。我根本無法想出其他合理的解釋。 – 2014-11-02 00:19:20