Как мне узнать, использует ли машина, на которой работает моя программа, гиперпоточность? (С #) - PullRequest
1 голос
/ 12 февраля 2009

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

Есть ли способ сделать это в C #?

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

Обновление: при доступе к Win32_Processor.NumberOfCores или Win32_Processor.NumberOfLogicalProcessors возникает исключение (исключение ManagmentException с сообщением «Not Found») на одной из машин (но не на всех) *

Ответы [ 6 ]

3 голосов
/ 12 февраля 2009

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

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

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

2 голосов
/ 12 февраля 2009

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

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

1 голос
/ 12 февраля 2009

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

1 голос
/ 12 февраля 2009

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

0 голосов
/ 12 февраля 2009

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

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

0 голосов
/ 12 февраля 2009

Вопрос StackOverflow 188503 содержит необходимую информацию ...

Цитируем лучший ответ на этот вопрос:

System.Environment.ProcessorCount

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

Чтобы различать Hyperthreaded и отдельные ядра, звучит так, как будто вам нужно немного WMI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...