gpt4 book ai didi

c - 测量 CPU 频率 (x86/x64)

转载 作者:可可西里 更新时间:2023-11-01 13:23:06 34 4
gpt4 key购买 nike

我正在寻找某种库,它可以在 32 位和 64 位 Windows 的 Intel 和 AMD 处理器上定期为我提供准确的 CPU 频率值。

这样做的目的是准确测量给定计算机上的 CPU 负载。问题是调用 QueryPerformanceCounter() 会返回时钟节拍(用于测量事件的持续时间),但由于 SpeedStep 或 TurboBoost,底层 CPU 频率不是恒定的。我发现有几台计算机在 BIOS 中关闭了 SpeedStep/TurboBoost,并且不会阻止基于负载的 CPU 频率缩放。

我正在尝试查看是否有任何可用的库可用于检测 CPU 频率变化(很像 Throttlestop/CPU-Z 甚至Windows 7 中 Resource Monitor 的概览选项卡),以便我可以查询并保存此信息以及我的其他测量值。性能计数器似乎没有返回可靠的信息,因为我的计算机总是返回 100% 的 CPU 频率,即使其他工具显示动态频率变化也是如此。

我搜索了这样的库,但返回的大多数结果都包含没有用的小工具等。

最佳答案

您可以结合使用高分辨率计时器和时钟周期计数器来计算当前时钟速率。在现代 CPU 上,可以使用此函数读取循环计数器:

static inline uint64_t get_cycles()
{
uint64_t t;
asm volatile ("rdtsc" : "=A"(t));
return t;
}

请注意,这是针对每个 CPU 的,因此如果您的程序在 CPU 周围移动,您就有麻烦了。如果您了解平台上的 CPU 固定技术,您可能想尝试一下。

对于高分辨率时间测量,您可以使用 <chrono> 中的工具;这是一个半有用的 post of mine关于这个话题。

关于c - 测量 CPU 频率 (x86/x64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10504769/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com