如何禁用dynamic频率缩放?

我想做一些微观基准,并尝试做正确的。 不幸的是,dynamic频率缩放使得基准testing非常不可靠。

有没有一种方法来编程(C + +,Windows)发现是否启用dynamic频率缩放? 如果可以在程序中禁用?

我曾试图在实际的基准testing之前使用一秒钟使用100%CPU的热身阶段,但结果也是不可靠的。

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

Solutions Collecting From Web of "如何禁用dynamic频率缩放?"

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

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

  • 还有两个我们感兴趣的成员,分别是ProcessorMinThrottleProcessorMaxThrottle ; 它们表示支持的系统处理器调节的最小和最大级别,以百分比表示。 如果两个成员的值均为100%,则表示CPU限制当前处于禁用状态,因此不需要重新配置它。

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

以非编程方式,您还可以使用Windows内置的命令行工具(即PowerCfg)来获取/设置Windows Power Options

进一步阅读

  • 能源管理
  • 电源管理功能

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

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

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