Вычисление времени работы функции (С++)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Kuzya, 28 Feb 2009.

  1. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    Требуется вычислить время затраченное на работу программы или на отдельный её кусок. В инете нашёл только функцию GetLocalTime, но даже не знаю как один её рещультат вычесть из другого. Подскажите пожалуйста как реализовать такой замер времени?
     
  2. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    395
    Reputations:
    297
    Во-первых какой у вас процессор. Если амд, то можете заюзать готовый профилировщик

    http://developer.amd.com/cpu/CodeAnalyst/codeanalystwindows/Pages/default.aspx

    AMD CodeAnalyst™ Performance Analyzer for Windows®

    Для интелов тоже есть, зовется Intel® VTune™ Performance Analyzer

    http://www.intel.com/cd/software/products/asmo-na/eng/239144.htm

    Как ручной способ могу предложить ассемблерные вставки с rdtsc

    Code:
    _asm
    {
    
    xor eax,eax
    
    cpuid
    
    rdtsc
    
    mov [count],eax
    
    //код, время выполнения которого меряем
    
    xor eax,eax
    
    cpuid
    
    rdtsc
    
    sub eax,[count]
    
    // в eax - сколько намеряли
    
    }
    
    
    однако, это рекомендованный код для интелов. GetLocalTime нехорошо юзоть, когда время выполнения программы меряете, совсем нехорошо. Результаты наверняка получите далекие от действительности.
     
    #2 0x0c0de, 28 Feb 2009
    Last edited: 28 Feb 2009