如何获得程序或者一段代码运行的时间?你可能说有专门的程序测试工具,确实,不过你也可以在程序中嵌入汇编代码来实现。
在Pentium的指令系统中有一条指令可以获得CPU内部64位计数器的值,我们可以通过代码两次获取该计数器的值而获得程序或代码运行的时钟周期数,进而通过你的cpu的频率算出一个时钟周期的时间,从而算出程序运行的确切时间。
我们通过指令TDSIC来获得cpu内部计数器的值,指令TDSIC返回值放在EDX:EAX中,其中EDX中存放64位寄存器中高32位的值,EAX存放第32位的值.
下面看看实现的代码:
| //用汇编实现获取一段代码运行的时间
#include<iostream> using namespace std; void GetClockNumber (long high, long low); |
| //获取代码结束时cpu内部计数器的值,并减去初值 __asm { RDTSC mov HighEnd, edx Mov LowEnd, eax ;获取两次计数器值得差 sub eax, LowStart cmp eax, 0 ; 如果低32的差为负则求返,因为第二次取得永远比第一次的大 jg L1 neg eax jmp L2 L1: mov numlow, eax L2: sbb edx, HighStart mov numhigh, edx } //把两个计数器值之差放在一个64位的整形变量中 //先把高32位左移32位放在64的整形变量中,然后再加上低32位 __int64 timer =(numhigh<<32) + numlow; //输出代码段运行的时钟周期数 //以频率1.1Gcpu为例,如果换计算机把其中的1.1改乘其 热门网络编程文章
|

