題 強制在Windows 7上的程序中使用特定的CPU核心


有沒有辦法強製程序在cpu1而不是cpu0上運行,因為我知道至少有兩個內核?

我正在使用Windows 7 x64上的code :: blocks編譯C ++


4
2017-07-13 23:26


起源


我傾向於說這是一個SO問題。 - rob


答案:


我知道您可以啟動任務管理器並查找正在運行的應用程序。右鍵單擊任務管理器中的應用程序,然後選擇“關聯”。

enter image description here

然後,您可以選擇要使用的處理器。

enter image description here


8
2017-07-13 23:53



請注意,我不認為這是一個保證,他們只會在選定的核心上運行,只是字面上的親和力。如果有線程讓Windows感覺到它A:可以移動而B:應該移動,它C:會移動它們。這也不能阻止其他東西在這些核心上運行(這是我打開的一個長期問題的主題:/) - Shinrai


是的,在Windows API中有: SetProcessAffinityMask()。您還可以使用任務管理器設置進程關聯 這裡顯示

您想要這樣做的原因並不是很多。操作系統通常可以很好地在正確的CPU上調度程序。


5
2017-07-13 23:52



你知道是否還有一種在特定核心上運行線程的方法嗎?因為GSC Game World在S.T.A.L.K.E.R.的一次更新中聲稱他們將詳細對象的計算移動到第二個處理器核心,我無法想像他們使用了一個完整的過程,一個簡單的線程會更有意義。 (stalker.filefront.com/file/...) - Felix Dombek
有 SetThreadAffinityMask() 但很可能S.T.A.L.K.E.R沒有使用它。他們只是將計算從他們的主遊戲邏輯線程中移出並將其放入它自己的專用線程中,讓操作系統處理在不同CPU上調度線程。 - shf301