簡體   English   中英

如何判斷我的程序所運行的計算機是否使用超線程? (C#)

[英]How do I tell if the machine my program is running on uses hyperthreading? (C#)

我有一些代碼需要了解特定機器上有多少個實際內核,以及是否啟用了超線程。

有沒有辦法在C#中做到這一點?

更新:這些機器是XP和Vista的混合體

更新:訪問“ Win32_Processor.NumberOfCores”或“ Win32_Processor.NumberOfLogicalProcessors”會在其中一台計算機(但不是全部)上引發異常(帶有消息“未找到”的ManagmentException)

在Vista或更高版本上,可以通過PInvoke使用GetLogicalProcessorInformation來獲取邏輯處理器單元的數量。

在Windows XP上,無法通過C#可靠地將超線程與其他多處理器/核心配置區分開。 有人發布的WMI解決方案會將多核處理器歸類為超線程。

在Vista之前,唯一可靠的方法是檢查處理器的CPUID。 要使用此功能,您可以創建可以從托管代碼中調用的本機DLL。 以下英特爾代碼示例將是一個很好的起點。

至少第一個問題的簡單答案: Environment.ProcessorCount應該返回計算機上的內核數。

編輯是一種非基於WMI的方法,用於檢查是否啟用了超線程(不是一定更好)。 另請參閱文章。

System.Environment.ProcessorCount將告訴您運行代碼的計算機上存在多少個內核。

檢查Environment.ProcessorCount屬性,它會返回一個整數,至於HyperThreading,我不確定。

StackOverflow問題188503具有您需要的信息...

引用該問題的最高答案:

System.Environment.ProcessorCount

返回邏輯處理器的數量(請參閱MSDN

要區分超線程內核和單獨的內核,聽起來好像需要一點WMI。

GetLogicalProcessorInformation對於HT方面已足夠,但可悲的是,它僅在XP SP3、64位XP / Vista / Server 2003中可用(並且我相信在Vista之前會有些許中斷)

喬·達菲(Joe Duffy)將其包裝在c#中,但尚未發布源代碼,盡管馬克·魯西諾維奇(Mark Russinovich)已發布了他使用它創建的工具(Coreinfo),可能您可以對其進行反編譯以查看代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM