4

我想做一些微基准测试,并尝试把它们做对。不幸的是,动态频率缩放使基准测试非常不可靠。

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

在实际基准测试发生之前,我尝试只使用一个使用 100% CPU 的预热阶段,但结果证明这也不可靠。

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

4

3 回答 3

8

一般来说,您需要执行以下步骤:

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

  • 还有另外两个我们感兴趣的成员,它们是ProcessorMinThrottleProcessorMaxThrottle;它们代表支持的系统处理器限制的最低和最高级别,以百分比表示。如果两个成员的值都已为 100%,这意味着 CPU 限制当前已禁用,因此您无需重新配置它。

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

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

延伸阅读

于 2010-10-20T09:16:39.203 回答
2

到目前为止,上述CallNtPowerInformation选项都不适合我。相关ProcessorThrottle领域is和改变 some s 没有工作SYSTEM_POWER_CAPABILITIESFALSESYSTEM_POWER_POLICY

但是,https: //www.geeks3d.com/20170213/how-to-disable-intel-turbo-boost-technology-on-a-notebook/#_24 概述了一种在电源管理设置中提供选项的方法。

使用 ProcMon,我能够将其追溯到以下注册表操作:

  1. 读取下面的ActivePowerScheme SZHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes以获取有功功率计划
  2. ACSettingIndexand/or DCSettingIndex DWORDunder设置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
于 2018-08-25T10:13:06.613 回答
0

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

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

我想,这可以使用CallNtPowerInformation函数以编程方式完成。

于 2010-10-20T07:53:51.897 回答