研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

動作周波数の取得 - rdtsc

2010-11-15 22:28:19 | Weblog

動作周波数の取得 - processor name動作周波数の取得 - gettimeofdayと、2回に分けて動作周波数の取得について書いてみたが、正確な動作周波数を検出するのは面倒である。

例えば Linux では /proc/cpuinfo に書かれているが、例えば MacOSX ではそういったファイルは見当たらない。Intel MKL ライブラリ内には次のような関数が用意されているが、誰もが MKL を持っているわけではないし、もう少し使い回せる方法を考えたい。

double  getcpufrequency(void);       /* Obsolete */
double  MKL_Get_Cpu_Frequency(void); /* get CPU frequency in GHz */
#define mkl_get_cpu_frequency MKL_Get_Cpu_Frequency
void    setcpufrequency(double*);       /* Obsolete */
void    MKL_Set_Cpu_Frequency(double*); /* Set "MKL internal" CPU frequency in GHz */
#define mkl_set_cpu_frequency MKL_Set_Cpu_Frequency

それではどうするのかというと、タイムスタンプカウンタを用いて基準時間を測定すれば良い。具体的には BIOS 割り込み rdtsc() を使用して計測すれば良い。Intel(R) Processor Identification and the CPUID Instruction. では、"BIOS tick count" を基準時間として計測している。"BIOS tick count" は 18.2 回/sec. で更新される。


最新の画像もっと見る

コメントを投稿