我刚购买了一个很棒的MBA 13英寸i7处理器。我被告知CPU速度会自动变化,而且相当不稳定。我非常想用一个简单的应用程序来监控它。
有没有Cocoa或C调用可以查找当前的时钟速度,而不会实际影响它?
编辑:我接受使用终端调用和编程的答案。
谢谢!
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;
}
试用这款称为 "Intel Power Gadget" 的工具,它可以实时显示IA频率和IA功率。
http://software.intel.com/sites/default/files/article/184535/intel-power-gadget-2.zip
由于这是英特尔处理器,您可以使用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”。
rdtsc
不是衡量处理器时钟速度可靠的方法。它无法调整以适应 Turbo Boost/CPU 节流等因素。 - Mysticialrdtsc
总是会报告3.2 GHz。只有当你开始操纵总线速度时,rdtsc
才会发生变化。 - Mysticial有一个由“flAked”编写的内核扩展,可以将CPU P状态记录到内核日志中。 http://www.insanelymac.com/forum/index.php?showtopic=258612
也许你可以联系他获取代码。
在OSX上似乎可以正常工作。 然而,在Linux上无法工作,因为sysctl已被弃用且KERN_CLOCKRATE未定义。
#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);
sysctl kern.clockrate
,我会得到一个稳定的输出 kern.clockrate: { hz = 100, tick = 10000, tickadj = 2, profhz = 100, stathz = 100 }
。而 Intel CPU 分析器显示的数值不同,因此我认为这不适用于 speedstep 调整。 - Tim
/proc/
。有一个system_profiler
命令,它可以提供盒子上列出的 CPU 速度,但它不会随着实时更新的时钟速度而改变。 - Tim