在OS X上以编程方式检测当前CPU时钟速度?

Tim*_*Tim 18 macos cpu clock cpu-speed

我刚买了一个漂亮的MBA 13"Core i7.我被告知CPU速度会自动变化,而且非常疯狂.我真的希望能用一个简单的应用来监控它.

是否有任何Cocoa或C调用来查找当前时钟速度,而不会实际影响它?

编辑:我可以使用终端呼叫以及程序化来获得答案.

谢谢!

小智 13

试试这个名为"Intel Power Gadget"的工具.它实时显示IA频率和IA功率.

http://software.intel.com/sites/default/files/article/184535/intel-power-gadget-2.zip


Dar*_*ust 12

您可以sysctl通过命令行轻松查询CPU速度:

sysctl hw.cpufrequency
Run Code Online (Sandbox Code Playgroud)

或者通过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;
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这似乎返回了“盒子广告”的速度(现在我的 MBPR 为 2.3ghz),而不是 SpeedStep 调整后的速度。 (3认同)
  • 这不适用于我的 M1 MacBook (2认同)

Tom*_*mmy 6

由于它是英特尔处理器,因此您始终可以使用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;
}
Run Code Online (Sandbox Code Playgroud)

在我的2Ghz MacBook Pro上输出'每秒钟数:2002120630'.

  • `rdtsc`不是测量处理器时钟速度的可靠方法.它不会自动适应涡轮增压/ CPU限制(以及其他因素). (7认同)