在OS X上编程检测当前CPU时钟速度



我刚买了一个漂亮的MBA 13"Core 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("%un", freq);
        return 0;
}

试试这个名为"英特尔电源小工具"的工具。它实时显示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"。

有一个由"flAked"编写的内核扩展,它将cpu p状态记录到内核日志中。http://www.insanelymac.com/forum/index.php?showtopic=258612

也许你可以联系他获取密码。

这似乎在OSX上正常工作。然而,它在Linux上不起作用,在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: %dn", clockinfo.hz);
  log_trace("clockinfo.tick: %dn", clockinfo.tick);

最新更新