rdtsc
指令可以获取CPU指令周期数,借此可以测试软件执行效率,参考使用rdtsc指令,测量程序的运行速度。
同时文中指出由于乱序执行,及cpu变频,会导致测试不准。
不过在某些对性能和延迟要求高的场合,是可以限制cpu降频的。方法如下(仅针对ubuntu):
- 在主板bios关掉所有节能选项;
- 用cpufrequtils设置为高性能模式;
sudo apt-get install cpufrequtils
sudo vi /etc/default/cpufrequtils
把下面一行加到cpufrequtils文件里面,然后保存关闭:
GOVERNOR="performance"
sudo update-rc.d ondemand disable
cpufreq-info #查看一下
用i7z查看更直观
sudo apt-get install i7z
sudo i7z
C0状态一直在100%的,就说明已经设置成功!下面就可以用rdtsc
来获取主频了。
static inline unsigned long long rdtsc_oai(void) __attribute__((always_inline))
{
unsigned long long a, d;
__asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
return (d<<32) | a;
}
double get_cpu_freq_GHz(void)
{
unsigned long long in = rdtsc_oai();
sleep(1);
unsigned long long diff = (rdtsc_oai()- in);
cpu_freq_GHz = (double)diff/1000000000;
return cpu_freq_GHz;
}