2
是否可以指示linux產生一個工作線程,但是將它複用到與父進程相同的CPU上,到特定的CPU?有沒有辦法在linux中爲線程設置cpu親和力來「跟隨」主線程?
是否可以指示linux產生一個工作線程,但是將它複用到與父進程相同的CPU上,到特定的CPU?有沒有辦法在linux中爲線程設置cpu親和力來「跟隨」主線程?
要複用同一套接字上的所有線程,您需要compact scheduling,這可以通過幾種方法實現。
如果您已經有了工人,請使用taskset
或numactl
來獲取當前的父親關係,然後將該子代移至同一個套接字。這個明顯的缺點是它是事後。
如果您尚未設置主設備,請爲英特爾OpenMP環境設置KMP_AFFINITY=compact
環境變量,或爲GNU OpenMP環境設置OMP_PROC_BIND=master
環境變量。這是事先設定的,但要求您瞭解您的編譯環境,或至少涵蓋所有情況。
我可能應該說「core」而不是「CPU」,我想讓兩個線程在一個內核上覆用,所以它們是時間交錯的。 –
如果您提前知道線程數,可以使用'OMP_NUM_THREADS'和'OMP_PROC_BIND = close'來[模擬它](http://www.glennklockwood.com/hpc-howtos/process-affinity.html# 2-2-round-robin-scheduling),但除此之外,我認爲你必須知道拓撲...在一天結束時,一切都調用['sched_setaffinity'](https://linux.die.net/man/2/sched_setaffinity),它需要知道拓撲。 – bishop