我想做一些微基准测试,并尝试做到正确。不幸的是,动态频率调整使得基准测试非常不可靠。
有没有办法以编程方式(C ++,Windows)查明是否启用了动态频率调整?如果,这可以在程序中禁用吗?
我试图在实际基准测试开始之前使用一次使用100%CPU的预热阶段,但结果也不可靠。
更新:即使我在BIOS中禁用SpeedStep,cpu-z也会显示频率在1995和2826 GHz之间变化
答案 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,我可以将其追溯到以下注册表操作:
ActivePowerScheme
下的SZ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes
值以获取有功功率计划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函数完成此操作。