这个代码如何计算经过的CPU周期数?
从
this SO thread开始,该代码计算行// 1和// 2之间运行代码的CPU周期数.
$cat cyc.c #include<stdio.h> static __inline__ unsigned long long rdtsc(void) { unsigned long long int x; __asm__ volatile (".byte 0x0f,0x31" : "=A" (x)); return x; } int main() { unsigned long long cycles = rdtsc(); //1 cycles = rdtsc() - cycles; //2 printf("Time is %dn",(unsigned)cycles); return 0; } $gcc cyc.c -o cyc $./cyc Time is 73 $./cyc Time is 74 $./cyc Time is 63 $./cyc Time is 73 $ rdtsc()函数如何工作? 解决方法
该函数执行x86指令RTDSC,它的操作码为0x0f,0x31.处理器内部跟踪时钟周期,并读取该数字.
当然,这只适用于x86 procs,其他处理器将需要不同的指令.
http://en.wikipedia.org/wiki/Time_Stamp_Counter (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |