我刚买了一个漂亮的 MBA 13" Core i7。有人告诉我 CPU 速度会自动变化,而且变化很大。我真的很想用一个简单的应用程序来监控它。
是否有任何 Cocoa 或 C 调用来查找当前时钟速度,而不实际影响它?
编辑:我可以使用终端调用以及程序化的答案。
谢谢!
试试这个名为“Intel Power Gadget”的工具。实时显示IA频率和IA功率。
http://software.intel.com/sites/default/files/article/184535/intel-power-gadget-2.zip
sysctl
您可以通过命令行轻松查询 CPU 速度:
sysctl hw.cpufrequency
或通过 C:
#include <stdio.h>
#include <sys/types.h>
#include <sys/sysctl.h>
int main() {
int mib[2];
unsigned int freq;
size_t len;
mib[0] = CTL_HW;
mib[1] = HW_CPU_FREQ;
len = sizeof(freq);
sysctl(mib, 2, &freq, &len, NULL, 0);
printf("%u\n", freq);
return 0;
}
由于它是英特尔处理器,因此您始终可以使用 RDTSC。这是一条返回当前周期计数器的汇编指令——一个每周期递增的 64 位计数器。这会有点近似,但例如
#include <stdio.h>
#include <stdint.h>
#include <unistd.h>
uint64_t rdtsc(void)
{
uint32_t ret0[2];
__asm__ __volatile__("rdtsc" : "=a"(ret0[0]), "=d"(ret0[1]));
return ((uint64_t)ret0[1] << 32) | ret0[0];
}
int main(int argc, const char * argv[])
{
uint64_t startCount = rdtsc();
sleep(1);
uint64_t endCount = rdtsc();
printf("Clocks per second: %llu", endCount - startCount);
return 0;
}
在我的 2Ghz MacBook Pro 上输出“每秒时钟数:2002120630”。
有一个由“flAked”编写的内核扩展,它将 cpu p-state 记录到内核日志中。 http://www.insanelymac.com/forum/index.php?showtopic=258612
也许你可以联系他获取代码。
这似乎在 OSX 上正常工作。但是,它在不推荐使用 sysctl 且未定义 KERN_CLOCKRATE 的 Linux 上不起作用。
#include <sys/sysctl.h>
#include <sys/time.h>
int mib[2];
size_t len;
mib[0] = CTL_KERN;
mib[1] = KERN_CLOCKRATE;
struct clockinfo clockinfo;
len = sizeof(clockinfo);
int result = sysctl(mib, 2, &clockinfo, &len, NULL, 0);
assert(result != -1);
log_trace("clockinfo.hz: %d\n", clockinfo.hz);
log_trace("clockinfo.tick: %d\n", clockinfo.tick);