2011-11-07 40 views
2

我有一個多線程程序,並且被要求添加一個選項來將每個線程放在它自己的核心(CPU,處理器,無論)上。我怎樣才能找到每個線程在哪個處理器上運行?

我已經使用SetThreadAffinityMask()編寫了代碼。我得到進程的默認關聯掩碼,驗證是否有足夠的處理器執行此操作,然後設置每個線程的關聯掩碼僅包含一個可用處理器(並且每個線程都不同)。

所有這些似乎編譯和運行沒有問題,但我該如何檢查它是否實際工作?

它似乎應該有一個監視工具,顯示一個線程正在運行的CPU,但我找不到它。 ProcessExplorer將顯示線程的CPU利用率,但不顯示發生在哪個CPU上。我查看了可以在perfmon上使用的可能的計數器,但是我只能找到%利用率,而不是哪個CPU。

有人建議我做一個GetThreadAffinityMask()並報告,但在我看來,這只是報告我正確地調用了SetThreadAffinityMask()。

所以,我只是認爲SetThreadAffinity()會完全符合我的要求嗎? (注意:我在SO上發現了很多看似相似的問題,但實際上並沒有包含這個特定問題的答案)。

回答

2
+1

可能您需要使用此功能進行採樣,以確保處理器編號在整個執行過程中保持不變。 – Tudor

+0

嗯。這需要修改每個線程來自行監控它。我想我可以寫一些臨時調試代碼來做到這一點。不是最佳的,但乞丐不能選擇。 –

+1

...請注意,我正在編譯XP級別的庫,但此鏈接處理了這個小問題。 https://www.scss.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm –

相關問題