您的位置:首页 > 编程语言 > C语言/C++

如何精确计算出一个算法的CPU运行时间?

2005-12-27 09:25 525 查看
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=211457
 
你需要多精确?  
GetTickCount可以到18-20ms进度  
timeGetTime可以到1ms精度  
……  
 
当然这些都不是C  or  c++  标准支持的。  
 
那么就要祭出最牛奔的方法,  
直接读取CPU开机以来执行的机器周期数,  
一条汇编指令:RDTSC  (就是  ReaD  TimeStamp  Count)  
精度可以达到ns级别。(准确地说精度是1  /  你的CPU的时钟频率,这也是极限)  
 
 
 
             
           long  HighStart,LowStart,HighEnd,LowEnd;  
           long  numhigh,numlow;  
             
           __asm  
           {  
                       RDTSC    
                                   mov  HighStart,  edx  
                                   mov  LowStart,  eax              
                                     
//  put  your  time-consuming  code    here  ……  
                                   RDTSC  
                                   mov  HighEnd,  edx  
                                   mov  LowEnd,    eax  
                                   //获取两次计数器值得差  
                                   sub  eax,    LowStart  
                                   cmp        eax,    0                
                                   jg          L1  
                                   neg          eax    
                                   jmp          L2  
                                     
L1:                        mov  numlow,    eax  
L2:                        sbb  edx,    HighStart  
                       mov  numhigh,  edx  
                         
           }  
           __int64    timer  =(numhigh<<32)  +  numlow;  //得出最终结果  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 timer 汇编 c++ c