Search code examples
c++timehigh-resolution-clock

High Resolution Timing Part of Your Code


I want to measure the speed of a function within a loop. But why my way of doing it always print "0" instead of high-res timing with 9 digits decimal precision (i.e. in nano/micro seconds)?

What's the correct way to do it?

#include <iomanip>
#include <iostream>
#include <time.h>
int main() {


 for (int i = 0; i <100; i++) {
    std::clock_t startTime = std::clock(); 
    // a very fast function in the middle
    cout << "Time: " << setprecision(9) << (clock() - startTime + 0.00)/CLOCKS_PER_SEC << endl;
 }

 return 0;
}

Related Questions:


Solution

  • Move your time calculation functions outside for () { .. } statement then devide total execution time by the number of operations in your testing loop.

    #include <iostream>
    #include <ctime>
    #define NUMBER 10000 // the number of operations
    
    // get the difference between start and end time and devide by
    // the number of operations
    double diffclock(clock_t clock1, clock_t clock2)
    {
        double diffticks = clock1 - clock2;
        double diffms = (diffticks) / (CLOCKS_PER_SEC / NUMBER);
        return diffms;
    }
    
    int main() {
        // start a timer here
        clock_t begin = clock();
    
        // execute your functions several times (at least 10'000)
        for (int i = 0; i < NUMBER; i++) {
            // a very fast function in the middle
            func()
        }
    
        // stop timer here
        clock_t end = clock();
    
        // display results here
        cout << "Execution time: " << diffclock(end, begin) << " ms." << endl;
        return 0;
    }
    

    Note: std::clock() lacks sufficient precision for profiling. Reference.