现在的位置: 首页 > 综合 > 正文

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

2013年08月11日 ⁄ 综合 ⁄ 共 1123字 ⁄ 字号 评论关闭

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;  //得出最终结果  

抱歉!评论已关闭.