【发布时间】:2012-06-15 12:01:45
【问题描述】:
在 Windows (7) 中找到确定 CPU 频率的可靠方法时遇到了一些麻烦。
我尝试过使用 Perfmon,但它的最大采样频率为 1 Hz。另外,我没有内核级别的访问权限,所以我不能使用机器特定的寄存器。有许多 C 函数可以确定处理器的最大频率,但 SpeedStep 和 Turbo Boost 使这些方法不可靠,因为我尝试过使用以恒定速率运行的片上定时器,因此不会t 反映可变的处理器频率。
我知道诸如 CPU-Z 之类的程序能够直接测量 CPU 频率,但我不知道它们实际上是如何做到的。 非常感谢任何帮助!
编辑:我也一直在研究使用 ACPI 来监控 CPU P-States 的可能性......这是一个选项吗?
Edit2:我目前正在研究使用特定于机器的寄存器 (http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.pdf) 来获取此信息...我觉得这对于解决方案来说可能是矫枉过正,但它是我最好的线索现在有。
【问题讨论】:
-
只从注册表中读取,HKLM\Hardware\Description\System\CentralProcessor\0\~Mhz值。
-
不幸的是,此注册表项不会随着 SpeedStep 频率的变化而变化。它提供标准的最大 CPU 频率,但在系统因负载低而降低 CPU 频率时不会改变。
-
尝试测量可变频率毫无意义。你得到的结果完全取决于你测量的方式。你尝试做的越准确,它就变得越高:)
-
我不太确定我是否理解...我试图测量给定时间点的频率,而不仅仅是弄清楚处理器的最大频率是多少。我正在做一些功耗分析,瞬时频率对功耗有很大影响……我知道有一个观察者效应在发生,但与 CPU 周期总数相比应该可以忽略不计。
标签: windows cpu frequency processor