mar*_*nus 3 c++ windows benchmarking cpu-speed
我想做一些微基准测试,并尝试做正确的.不幸的是,动态频率调整使得基准测试非常不可靠.
有没有办法以编程方式(C++,Windows)找出是否启用了动态频率调整?如果,这可以在程序中禁用吗?
香港专业教育学院曾试图在实际基准测试发生前使用100%CPU的预热阶段,但事实证明这也是不可靠的.
更新:即使我在BIOS中禁用SpeedStep,cpu-z显示频率在1995和2826 GHz之间变化
通常,您需要执行以下步骤:
调用SystemPowerCapabilitiesCallNtPowerInformation()并将其传递给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 电源选项.