Как узнать, использует ли машина, на которой работает моя программа, гиперпоточность?(С#)

StackOverflow https://stackoverflow.com/questions/543039

  •  23-08-2019
  •  | 
  •  

Вопрос

У меня есть код, который должен знать, сколько фактических ядер доступно на моей конкретной машине и включена ли Hyperthreading.

Есть ли способ сделать это на С#?

Обновлять:Машины представляют собой смесь XP и Vista.

Обновлять:Доступ к Win32_Processor.NumberOfCores или Win32_Processor.NumberOfLogicalProcessors вызывает исключение (ManagmentException с сообщением «Не найдено») на одном из компьютеров (но не на всех).

Это было полезно?

Решение

В Vista и выше вы можете использовать GetLogicalProcessorInformation через PInvoke, чтобы получить количество логических процессорных модулей.

В Windows XP нет способа с помощью C# надежно отличить гиперпоточность от других многопроцессорных/ядерных конфигураций.Решение WMI, которое кто-то опубликовал, будет классифицировать многоядерные процессоры как гиперпоточные.

До Vista единственным надежным способом была проверка CPUID процессора.Чтобы использовать это, вы можете создать собственную DLL, которую можно будет вызывать из вашего управляемого кода.Следующий код Intel образец было бы хорошей отправной точкой.

Другие советы

Простой ответ хотя бы на первый вопрос: Environment.ProcessorCount должен вернуть количество ядер на машине.

Редактировать: Здесьэто не основанный на WMI метод проверки того, включена ли Hyperthreading (не то чтобы он обязательно был лучше).Также см этот статья.

System.Environment.ProcessorCount сообщит вам, сколько ядер существует на компьютере, на котором выполняется код.

Проверьте свойство Environment.ProcessorCount, оно вернет целое число, насчет HyperThreading я не уверен.

Вопрос StackOverflow 188503 есть необходимая информация...

Цитирую главный ответ на этот вопрос:

System.Environment.ProcessorCount

возвращает количество логических процессоров (см. MSDN)

Чтобы отличить Hyperthreaded от отдельных ядер, вам понадобится немного WMI.

GetLogicalProcessorInformation достаточно для аспекта HT, но, к сожалению, он доступен только в XP SP3, 64-разрядной версии XP/Vista/Server 2003 (и я считаю, что он немного сломан в версии Pre Vista)

Джо Даффи обернул это в C #, но еще не опубликовал исходный код, хотя Марк Руссинович выпустил инструмент (Coreinfo), который он создал с его помощью, вероятно, вы можете декомпилировать его, чтобы увидеть код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top