Использование библиотеки htmobile для определения информации о процессоре

Введение

Библиотека htmobile позволяет узнать характеристики и идентифицирующие данные процессора для повышения производительности приложений.

Ханг Нгуйен (Khang Nguyen)

Для увеличения эффективности работы современных аппаратных платформ необходимы приложения, обеспечивающие доступ к постоянно возрастающему объему информации по оборудованию.

Например, физический процессор с поддержкой технологии Hyper-Threading определяется операционной системой как два логических процессора. Поскольку логические процессоры разделяют некоторые общие ресурсы, работать с двумя такими процессорами необходимо несколько иначе, нежели с двумя физическими процессорами. Более того, когда операционная система "видит" два процессора вместо одного, технологию Hyper-Threading необходимо учитывать при лицензировании программного обеспечения, если цена рассчитывается исходя из количества процессоров.

Другая проблема, на которую необходимо обратить внимание – это многопоточные приложения в многопроцессорных системах. В идеальном случае, для обеспечения максимальной производительности количество созданных потоков должно быть равным количеству доступных процессоров.

В системе с технологией Hyper-Threading, операционная система возвращает количество логических процессоров, а не количество физических процессоров. Таким образом, количество созданных потоков может быть больше, чем число физических процессоров. Данная ситуация приведет к конфликтам при доступе потоков к ресурсам и, следовательно, к ухудшению производительности.

Для распределения нагрузки также необходимо знать идентификаторы текущего физического и логического процессора, процесса и потока.

Помимо всего прочего, для технологии Intel® Centrino® для мобильных ПК необходима утилита для определения процессора Pentium® M, потому что его архитектура отличается от архитектуры процессора Pentium® 4. Эта разница в архитектуре приводит к тому, что оптимизированные для Pentium 4 программы не всегда хорошо работают в системах на базе технологии Intel Centrino для мобильных ПК.


Библиотека htmobile предоставляет обширную информацию о платформе

Библиотека htmobile содержит функции, которые возвращают большое количество данных для решения вышеуказанных задач, начиная от определения технологии Hyper-Threading, количества физических процессоров и их идентификаторов для установления характеристик и состояния мобильной системы и заканчивая определением потоковых расширений SIMD (SSE/SSE2) и поддержкой технологии новых инструкций ядра Prescott (PNI).

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

Библиотека поддерживает широкий спектр аппаратных платформ, включая AMD Athlon*, процессоры Pentium®, Pentium® Pro, Pentium® II, Pentium® III, Pentium® III Xeon™, Pentium 4 и Pentium M. При этом, количество физических процессоров не ограничено. Библиотека работает под управлением Windows 98*, Windows ME?, 32-разрядной Windows 2000* и 32-разрядной Windows XP*. Поддерживаются компиляторы Intel® C++ , а также Microsoft Visual C++* версии 6.0 и выше.

Библиотека htmobile состоит из двух частей: файла библиотеки, который называется htmobile.lib, и заголовочного файла htmobile.h. Функции библиотеки можно логически разделить на три категории: функции, связанные с технологией Hyper-Threading, функции, связанные с особенностями процессоров, и функции, связанные с мобильностью. Мы будем использовать это разделение при последующем рассмотрении.


Функции библиотеки htmobile, связанные с технологией Hyper-Threading

Следующие функции htmobile собирают информацию, относящуюся к технологии Hyper-Threading:

  • GetAPIC_Physical_IDвозвращает значение в байтах, которое содержит логический и физический идентификатор текущего процесса.
    • Синтаксис: unsigned char GetAPIC_Physical_ID (void)
    • Возвращаемое значение: 0xFF, если система не поддерживает эту функцию.
  • LogicalProcPerPhysicalProcвозвращает значение в байтах, которое содержит информацию о количестве логических процессоров в одном физическом процессоре.
    • Синтаксис: unsigned char LogicalProcPerPhysicalProc (void)
    • Возвращаемое значение: Количество логических процессоров.
  • SupportHTпроверяет наличие в процессоре технологии Hyper-Threading.
    • Синтаксис: unsigned int SupportHT (void)
    • Возвращаемое значение: 0 если технология Hyper-Threading не найдена.
  • HTStatusполучает состояние технологии Hyper-Threading.
    • Синтаксис: BYTE HTStatus (void)
    • Возвращаемые значения:
      HT_NOT_CAPABLE 1
      HT_ENABLED 2
      HT_PERMANENT_DISABLED 4
      HT_SUPPORTED_NOT_ENABLED 8
      HT_CANNOT_DETECT 16
  • NumberOfPhysicalCPUполучает количество физических процессоров, вне зависимости от того, поддерживается ли технология Hyper-Threading.
    • Синтаксис: DWORD NumberOfPhysicalCPU (void)
    • Возвращаемое значение: CANNOT_DETECT_PHY_CPU 0xFF в случае ошибки.
  • CurPhysicalProcIdполучает идентификатор текущего физического процессора.
    • Синтаксис: DWORD CurPhysicalProcId (void)
    • Возвращаемое значение: PHY_ID_NOT_SUPPORTED 0xFFFFFFFF в случае если процессор – не Pentium 4 и не мобильный процессор Intel® Pentium® 4-M.
  • CurLogicalProcIdполучает идентификатор текущего физического процессора.
    • Синтаксис: DWORD CurLogicalProcId (void)
    • Возвращаемое значение: LOG_ID_NOT_SUPPORTED 0xFFFFFFFF в случае если процессор – не Pentium 4 и не мобильный процессор Intel Pentium 4-M.
  • CurProcessIdполучает идентификатор текущего процессора.
    • Синтаксис: DWORD CurProcessId (void)
  • CurThreadIdполучает идентификатор текущего физического процессора.
    • Синтаксис: DWORD CurThreadId (void)

Функции библиотеки htmobile, связанные с характеристиками процессоров

Следующие функции htmobile собирают информацию, связанную с характеристиками и признаками процессора:

  • SupportMMXпроверяет, поддерживает ли процессор MMX.
    • Синтаксис: bool SupportMMX (void)
    • Возвращаемое значение: 0, если MMX не поддерживается.
  • SupportSSEпроверяет, поддерживает ли процессор SSE.
    • Синтаксис: bool SupportSSE (void)
    • Возвращаемое значение: 0, если SSE не поддерживается.
  • SupportSSE2проверяет, поддерживает ли процессор SSE2.
    • Синтаксис: bool SupportSSE2 (void)
    • Возвращаемое значение: 0, если SSE2 не поддерживается.
  • SupportPNIпроверяет, поддерживает ли процессор PNI.
    • Синтаксис: bool SupportPNI (void)
    • Возвращаемое значение: 0, если PNI не поддерживается.

Функции библиотеки htmobile, связанные с мобильностью

Следующие функции htmobile собирают информацию, относящуюся мобильным возможностям системы:

  • ACLineONпроверяет, подключен ли портативный ПК к электрической сети.
    • - Синтаксис: bool ACLineON (void)
    • - Возвращаемое значение: 0, если система не подключена.
  • GetBatteryChargingStatus возвращает статус батареи портативного ПК. (Примечание:Эту функцию нельзя использовать в критических приложениях.)
    • - Синтаксис: BYTE GetBatteryChargingStatus (void)
    • - Возвращаемые значения:
      NO_BATTERY 128
      BATTERY_STATUS_UNKNOWN 255
      CHARGE_HIGH 1
      CHARGE_LOW 2
      CHARGE_CRITICAL 4
      CHARGE_CHARGING 8
  • PercentBatteryRemain возвращает процент заряда батареи портативного ПК. (Примечание:Эту функцию нельзя использовать в критических приложениях.)
    • - Синтаксис: BYTE PercentBatteryRemain (void)
    • - Возвращаемое значение: PERCENT_BATTERY_UNKNOWN 255 в случае ошибки.
  • BatteryTimeRemain возвращает остаточное время работы батареи портативного ПК. (Примечание:Эту функцию нельзя использовать в критических приложениях.)
    • - Синтаксис: DWORD BatteryTimeRemain (void)
    • - Возвращаемое значение: UNKNOWN 0xFFFFFFFF в случае ошибки.
  • BatteryFullTime возвращает остаточный процент батареи портативного ПК. (Примечание:Эту функцию нельзя использовать в критических приложениях.)
    • - Синтаксис: DWORD BatteryFullTime (void)
    • - Возвращаемое значение: UNKNOWN 0xFFFFFFFF в случае ошибки.

Вывод

Очень важно получить правильные данные о количестве физических процессоров системы, потому что эта информация является важной составной частью, определяющей производительность многопотоковых приложений в многопроцессорных конфигурациях. Это особенно актуально для систем, которые поддерживают технологию Hyper-Threading, поскольку в этом случае Windows не может самостоятельно определить количество физических процессоров.

Разработчики должны различать системы на базе процессоров Pentium 4 и Pentium M, так как это две разные архитектуры, требующие разных типов оптимизации приложений. В совокупности с дополнительной информацией, которую возвращают функции библиотеки htmobile, включая характеристики процессора и сведения о питании мобильных ПК, эти данные являются для приложений эффективным средством определения ключевой информации об аппаратной платформе. Данная информация очень важна при разработке легких в управлении приложений, оптимально использующих аппаратные средства.


Дополнительные ресурсы

Дополнительная информация по теме данной статьи доступна в Практических рекомендациях Intel AP485, "Идентификация процессоров Intel® и инструкция CPUID"

Intel, крупнейший производитель микросхем в мире, также предлагает целый ряд полезных продуктов и информации для разработчиков программного обеспечения:

  • Код, описанный в данном документе
  • Программа Intel® Software Partner предлагает поставщикам ПО новейшие технологии Intel, которые помогают компаниям-участникам улучшать линии продуктов и увеличивать долю на рынке.
  • Intel® Developer Zone - бесплатные статьи и тренинги в помощь разработчикам программного обеспечения для увеличения производительности кода при уменьшении затрачиваемых сил и времени.
  • Решения Intel® для разработчиков ПО включает компиляторы, анализаторы производительности, библиотеки производительности и инструменты для работы с потоками.
  • IT@Intel описывает полученный опыт идентификации, оценки и развертывания новых технологий посредством технических документов, историй успеха и при помощи других материалов.

Категории:
Пожалуйста, обратитесь к странице Уведомление об оптимизации для более подробной информации относительно производительности и оптимизации в программных продуктах компании Intel.