2009-02-12 5 views
1

У меня есть код, который должен знать, сколько реальных ядер доступно на моей конкретной машине, и включена ли поддержка Hyperthreading.Как определить, работает ли моя программа, использует ли гиперпоточность? (C#)

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

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

Update: доступ к 'Win32_Processor.NumberOfCores' или '' Win32_Processor.NumberOfLogicalProcessors бросает исключение (а ManagmentException с сообщением "Not Found") на одном из машины (но не все)

ответ

3

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

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

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

+0

Ссылка была сломана – Anton

+0

Я думал, что HT будет 2 логических процессора, 1 физический и двухъядерный будет отображать 2 логических и 2 физических процессора. –

1

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

1

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

2

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

Edit: Here «s не-WMI на основе метода проверки, включена ли Hyperthreading (не то, чтобы это лучше обязательно). Также см. Статью this.

0

StackOverflow question 188503 имеет информацию, необходимую ...

Цитирование верхний ответ на этот вопрос:

System.Environment.ProcessorCount 

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

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

0

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

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

Смежные вопросы