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

    2005-12-27

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://oxware.blogbus.com/logs/1757191.html

    http://blog.csdn.net/Purpleendurer/archive/2005/12/27/562995.aspx

    你需要多精确?  
    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;  //得出最终结果


    历史上的今天:

    被逼的 2005-12-27

    随机文章:

    上班第一天 2009-11-04
    小瓷猫 2009-11-04
    被逼的 2005-12-27

    收藏到:Del.icio.us