我想做一些微基准测试,并尝试把它们做对。不幸的是,动态频率缩放使基准测试非常不可靠。
有没有办法以编程方式(C++,Windows)找出是否启用了动态频率缩放?如果,这可以在程序中禁用吗?
在实际基准测试发生之前,我尝试只使用一个使用 100% CPU 的预热阶段,但结果证明这也不可靠。
更新:即使我在 BIOS 中禁用 SpeedStep,cpu-z 显示频率在 1995 和 2826 GHz 之间变化
我想做一些微基准测试,并尝试把它们做对。不幸的是,动态频率缩放使基准测试非常不可靠。
有没有办法以编程方式(C++,Windows)找出是否启用了动态频率缩放?如果,这可以在程序中禁用吗?
在实际基准测试发生之前,我尝试只使用一个使用 100% CPU 的预热阶段,但结果证明这也不可靠。
更新:即使我在 BIOS 中禁用 SpeedStep,cpu-z 显示频率在 1995 和 2826 GHz 之间变化
一般来说,您需要执行以下步骤:
调用SystemPowerCapabilitiesCallNtPowerInformation()
并将其传递给InformationLevel参数,将lpInputBuffer和nInputBufferSize设置为,然后将 lpOutputBuffer 设置为SYSTEM_POWER_CAPABILITIES结构,并将nOutputBufferSize设置为结构的大小。在第一次调用之后,包含当前系统电源功能的结构。要检查系统是否支持处理器节流,请读取ProcessorThrottle的值。NULL
SYSTEM_POWER_CAPABILITIES
还有另外两个我们感兴趣的成员,它们是ProcessorMinThrottle和ProcessorMaxThrottle;它们代表支持的系统处理器限制的最低和最高级别,以百分比表示。如果两个成员的值都已为 100%,这意味着 CPU 限制当前已禁用,因此您无需重新配置它。
要禁用 CPU 节流,您需要将ProcessorMinThrottle和ProcessorMaxThrottle设置为100%
。为此,CallNtPowerInformation()
再次调用并将SystemPowerCapabilities传递给InformationLevel参数;但现在,将lpInputBuffer设置为 SYSTEM_POWER_CAPABILITIES 结构,其中两个成员已设置为100%
. 我相信你知道下一步该做什么。
以非编程方式,您还可以使用 Windows 内置命令行工具,即PowerCfg获取/设置 Windows电源选项。
到目前为止,上述CallNtPowerInformation
选项都不适合我。相关ProcessorThrottle
领域is和改变 some s 没有工作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
and/or DCSettingIndex
DWORD
under设置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提供#处理器性能提升模式):
powercfg -setacvalueindex scheme_current sub_processor PERFBOOSTMODE 0
powercfg -setdcvalueindex scheme_current sub_processor PERFBOOSTMODE 0
powercfg -setactive scheme_current
在 Windows XP 和更高版本中,CPU 速度由电源策略管理。如果在 Windows 电源管理对话框中设置“最大性能”模式,它不会关闭缩放吗?
还有一些第三方工具——例如SpeedSwitchXP。
我想,这可以使用CallNtPowerInformation函数以编程方式完成。