Как отключить динамическое масштабирование частоты? - PullRequest
3 голосов
/ 20 октября 2010

Я хотел бы сделать некоторые микробенчмарки и попытаться сделать их правильно. К сожалению, динамическое масштабирование частоты делает бенчмаркинг очень ненадежным.

Есть ли способ программно (C ++, Windows) узнать, включено ли динамическое масштабирование частоты? Если это можно отключить в программе?

Я пытался просто использовать фазу разогрева, которая использует 100% ЦП за секунду до фактического теста, но это также оказалось ненадежным.

ОБНОВЛЕНИЕ : Даже когда я отключаю SpeedStep в BIOS, cpu-z показывает, что частота изменяется между 1995 и 2826 ГГц

Ответы [ 3 ]

8 голосов
/ 20 октября 2010

В общем, вам нужно выполнить следующие шаги:

  • Вызов CallNtPowerInformation() и передача SystemPowerCapabilities в InformationLevel , установка lpInputBuffer и nInputBufferSize в NULL, затем установите lpOutputBuffer на SYSTEM_POWER_CAPABILITIES структуру и установите nOutputBufferSize на размер структуры. После этого первого вызова SYSTEM_POWER_CAPABILITIES структура, содержащая текущие возможности системы питания. Чтобы проверить, поддерживает ли система регулировку процессора, прочитайте значение ProcessorThrottle .

  • Нас интересуют еще два члена: ProcessorMinThrottle и ProcessorMaxThrottle ; они представляют минимальный и максимальный уровень поддерживаемого регулирования системного процессора, выраженный в процентах. Если оба элемента уже имеют значения 100%, это означает, что регулирование ЦП в настоящее время отключено, поэтому вам не нужно его перенастраивать.

  • Чтобы отключить управление процессором, вам нужно установить ProcessorMinThrottle и ProcessorMaxThrottle в 100%. Для этого снова вызовите CallNtPowerInformation() и передайте SystemPowerCapabilities в InformationLevel параметр; но теперь установите lpInputBuffer в структуру SYSTEM_POWER_CAPABILITIES, в которой для двух членов установлено значение 100%. Я уверен, что вы знаете, что делать дальше.

Непрограммным способом вы также можете получить / установить Windows Power Options , используя встроенные средства командной строки Windows, то есть PowerCfg .

Дальнейшее чтение

1 голос
/ 25 августа 2018

Пока что ни один из перечисленных выше вариантов CallNtPowerInformation не работает для меня. Соответствующее ProcessorThrottle поле SYSTEM_POWER_CAPABILITIES было FALSE, и изменение некоторых SYSTEM_POWER_POLICY не работало.

Однако https://www.geeks3d.com/20170213/how-to-disable-intel-turbo-boost-technology-on-a-notebook/#_24 описывает способ сделать параметр доступным в настройках управления питанием.

С ProcMon мне удалось отследить его до следующих манипуляций с реестром:

  1. Считайте значение ActivePowerScheme SZ в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes, чтобы получить план активной мощности
  2. Установите для ACSettingIndex и / или DCSettingIndex DWORD для Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes\<above active power plan GUID>\54533251-82be-4824-96c1-47b60b740d00\be337238-0d82-4146-a960-4f3749d470c7 значение 0 (отключено или что вы выберете) от 2 (высокий)

К сожалению, соответствующие ключи принадлежат системе, что означает, что вы должны либо предложить пользователю (который должен иметь права администратора) изменить права доступа к ключу, либо вы должны использовать powercfg для управления настройкой , Последнее предпочтительнее и, кажется, действительно работает, даже без доступа администратора (любезно предоставлено https://docs.microsoft.com/en-us/windows-server/administration/performance-tuning/hardware/power/power-performance-tuning#processor-performance-boost-mode):

powercfg -setacvalueindex scheme_current sub_processor PERFBOOSTMODE 0
powercfg -setdcvalueindex scheme_current sub_processor PERFBOOSTMODE 0
powercfg -setactive scheme_current
0 голосов
/ 20 октября 2010

В Windows XP и более поздних версиях скорость процессора определяется политикой электропитания.Не отключается ли масштабирование, если вы установили режим «Максимальная производительность» в диалоговом окне управления питанием Windows?

Существуют также некоторые сторонние инструменты - SpeedSwitchXP , например.

Программно это можно сделать, я полагаю, с помощью функции CallNtPowerInformation .

...