2013-03-12 145 views
2

我目前在具有多個六核心cpus的C多線程服務器上工作。我想將一些線程的親和性設置爲單個CPU的各個核心。我已經使用了pthread_setaffinity_np()和sched_setaffinity(),但我猜測cpus上的集合關係不是核心。我對嗎?如何在單個CPU的多個CPU核心上設置關聯,而不是在多個CPU上?

+0

通過您提到的'sched_setaffinity'我猜你正在使用Linux,所以我更新了標籤以反映這一點。 – 2013-03-12 08:24:01

+0

我認爲默認的API不區分物理CPU,它們只能看到內核,甚至可能是超線程的「假內核」。但是,通過查看API報告的CPU數量,這應該很容易確定,並將其與真實的CPU /內核/超線程計數進行比較。 – hyde 2013-03-12 08:25:52

+0

「sched_setaffinity」和「pthread_setaffinity_np」所指的CPU都是邏輯核心。 – 2013-03-12 08:28:02

回答

2

pthread_setaffinity_np()等以邏輯CPU(即核心)而非物理(即CPU插座)的方式進行操作。

+0

/cpu/proc顯示我有12個hexacore CPU。但是同時設置兩個線程在SET 0和SET 1。我可以發現它們運行在不同的物理CPU上,而不是1個CPU的2個核心。 – 2013-03-12 08:53:49

+0

嘿抱歉,我錯了lscpu給了我正確的信息..實際上我有一個單核cpu有6個超線程核心... :-)所以它實際上與邏輯CPU綁定非常感謝.. :-) – 2013-03-13 09:51:44