我想做一些微基准测试,并尝试做对。不幸的是,动态频率缩放使基准测试非常不可靠。
有没有办法以编程方式(C++、Windows)查明是否启用了动态频率缩放?如果,这可以在程序中禁用吗?
我试过在实际基准测试发生之前使用 100% CPU 的预热阶段一秒钟,但事实证明这也不可靠。
更新:即使我在 BIOS 中禁用 SpeedStep,cpu-z 也会显示频率在 1995 和 2826 GHz 之间变化
最佳答案
一般情况下,您需要执行以下步骤:
调用
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 内置命令行工具获取/设置 Windows 电源选项,即 PowerCfg .
进一步阅读
关于c++ - 如何禁用动态频率缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3975551/