19

気の利いたMBA13"Core i7を購入しました。CPU速度は自動的に変化し、かなり激しく変化すると言われています。シンプルなアプリでこれを監視できるようにしたいと思っています。

実際に影響を与えることなく、現在のクロック速度を見つけるためのCocoaまたはCの呼び出しはありますか?

編集:私はターミナルコールとプログラマティックを使用した回答で大丈夫です。

ありがとう!

4

5 に答える 5

14

「IntelPowerGadget」と呼ばれるこのツールを試してください。IA周波数とIAパワーをリアルタイムで表示します。

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

于 2013-04-09T14:07:22.257 に答える
13

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;
}
于 2013-01-16T10:02:35.893 に答える
7

Intelプロセッサなので、いつでも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 MacBookProで「Clockspersecond:2002120630」を出力します。

于 2012-03-30T19:36:28.820 に答える
0

「flAked」によって記述されたカーネル拡張機能があり、CPUのp状態をカーネルログに記録します。 http://www.insanelymac.com/forum/index.php?showtopic=258612

多分あなたはコードのために彼に連絡することができます。

于 2012-08-07T13:09:44.710 に答える
0

これは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);
于 2013-05-01T02:44:39.937 に答える