如何禁用动态频率调整?

时间:2010-10-20 07:20:45

标签: c++ windows benchmarking cpu-speed

我想做一些微基准测试,并尝试做到正确。不幸的是,动态频率调整使得基准测试非常不可靠。

有没有办法以编程方式(C ++,Windows)查明是否启用了动态频率调整?如果,这可以在程序中禁用吗?

我试图在实际基准测试开始之前使用一次使用100%CPU的预热阶段,但结果也不可靠。

更新:即使我在BIOS中禁用SpeedStep,cpu-z也会显示频率在1995和2826 GHz之间变化

3 个答案:

答案 0 :(得分:8)

通常,您需要执行以下步骤:

  • 调用CallNtPowerInformation()并将 SystemPowerCapabilities 传递给 InformationLevel 参数,设置 lpInputBuffer nInputBufferSize NULL,然后将 lpOutputBuffer 设置为SYSTEM_POWER_CAPABILITIES结构,并将 nOutputBufferSize 设置为结构的大小。在第一次调用之后,SYSTEM_POWER_CAPABILITIES结构包含当前系统的电源功能。要检查系统是否支持处理器限制,请读取 ProcessorThrottle 的值。

  • 我们感兴趣的还有其他两个成员,他们是 ProcessorMinThrottle ProcessorMaxThrottle ;它们表示支持的系统处理器限制的最小和最大级别,以百分比表示。如果两个成员的值都已达到100%,则表示当前已禁用CPU限制,因此您无需重新配置它。

  • 要禁用CPU限制,您需要将 ProcessorMinThrottle ProcessorMaxThrottle 设置为100%。为此,请再次致电CallNtPowerInformation()并将 SystemPowerCapabilities 传递给 InformationLevel 参数;但现在,将 lpInputBuffer 设置为SYSTEM_POWER_CAPABILITIES结构,其中两个成员已设置为100%。我相信你知道下一步该做什么。

以非程序化方式,您还可以使用Windows内置命令行工具(即PowerCfg)获取/设置Windows 电源选项

进一步阅读

答案 1 :(得分:1)

到目前为止,以上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从2(高)设置为0(禁用,或您选择的任何选项)

不幸的是,相关密钥归系统所有,这意味着您必须提示用户(必须具有管理员访问权限)才能更改密钥的权限,或者必须使用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

答案 2 :(得分:0)

在Windows XP及更高版本中,CPU速度由电源策略管理。如果在Windows电源管理对话框中设置“最高性能”模式,它是否会关闭缩放?

还有一些第三方工具 - 例如SpeedSwitchXP

我想,通过编程,可以使用CallNtPowerInformation函数完成此操作。