Всегда ли GetSystemInfo (в Windows) возвращает количество логических процессоров? - PullRequest
5 голосов
/ 02 апреля 2010

Читая об этом и, в частности, читая документы Microsoft, похоже, что он должен возвращать число ФИЗИЧЕСКИХ процессоров, и что вам следует использовать GetLogicalProcessorInformation, чтобы выяснить, сколько у вас процессоров LOGICAL.

Вот документ, который я нашел в структуре SYSTEM_INFO: http://msdn.microsoft.com/en-us/library/ms724958(v=VS.85).aspx А вот документация по GetLogicalProcessorInformation: (пробелы добавлены, чтобы пройти через фильтр спама) http: // msdn.microsoft.com/ ru-ru / library / ms683194.aspx

Более подробно об этом читаем, хотя в большинстве обсуждений, которые я нашел по этой теме, разработчики говорят, что GetSystemInfo (и структура SYSTEM_INFO) сообщают о количестве процессоров LOGICAL.

При повторном поиске я обнаружил, что MS опубликовала некоторую информацию об этом (и оперативном исправлении) здесь (добавлены пробелы для прохождения через спам-фильтр): http: // support. microsoft.com/ kb / 936235

Считая, что это звучит так, как в Xp, с пакетом обновления 3, GetSystemInfo сообщает о количестве процессоров LOGICAL в структуре SYSTEM_INFO. Мне также показалось, что в Windows Vista и Windows 7 GetSystemInfo должна сообщать о количестве ФИЗИЧЕСКИХ процессоров (в отличие от Windows XP с предварительным пакетом обновления 3).

Кто-нибудь знает, что он на самом деле делает? Действительно ли GetSystemInfo сообщает о количестве физических процессоров (на одном компьютере) по-разному, в зависимости от того, на какой ОС он работает?

1 Ответ

4 голосов
/ 02 апреля 2010

Считая, что это похоже на Xp, пакет обновления 3 перед пакетом обновления, GetSystemInfo сообщает о количестве процессоров LOGICAL в структуре SYSTEM_INFO. Мне также показалось, что в Windows Vista и Windows 7 GetSystemInfo должна сообщать о количестве ФИЗИЧЕСКИХ процессоров (в отличие от Windows XP с предварительным пакетом обновления 3).

Это правильно. Windows XP pre SP2) не делает различий между логическими и физическими процессорами. (В конце концов, логические процессоры не существовали на момент выпуска Windows XP). Поэтому, пока функция возвращает то, что операционная система считает «физическими процессорами», нет никакой разницы до SP2.

Я полагаю, что для обеспечения совместимости XP SP2 + продолжает сообщать о логических процессорах для этой конкретной функции, потому что именно этого ожидают приложения от машин XP. Это гораздо быстрее и проще спросить: «Я на XP?» чем спросить «Я на XP SP3?».

Почему здесь разница между SP2 и SP3? Несмотря на разницу между физическими и логическими процессорами в пакете обновления 2, это изменение повлияло только на то, как выставляются счета за SKU. По сути, в системе XP может быть до 32 логических процессоров, но максимум 2 физических процессора после SP2. До SP2 вы были ограничены 2 логическими процессорами. Однако ОС не предоставляла эту функциональность в API, пока не был выпущен SP3.

Короче говоря, если вы хотите получить логические процессоры до SP3, просто получите физические процессоры - ОС не знает никакой разницы. Пост SP3, звонок GetLogicalProcessorInformation. Если вы хотите получить физические процессоры, то до SP3 то, что вы хотите, невозможно ( EDIT: По крайней мере с win32 apis). После SP3 конечно можно позвонить GetLogicalProcessorInformation.

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