High Resolution Timing Part of Your Code

不羁岁月 提交于 2019-11-30 14:20:57

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.

A few pointers:

  1. I would be careful with the optimizer, it might throw all your code if I will think that it doesn't do anything.
  2. You might want to run the loop 100000 times.
  3. Before doing the total time calc store the current time in a variable.
  4. Run your program several times.

If you need higher resolution, the only way to go is platform dependent.

On Windows, check out the QueryPerformanceCounter/QueryPerformanceFrequency API's.

On Linux, look up clock_gettime().

hasen

See a question I asked about the same thing: apparently clock()'s resolution is not guaranteed to be so high.

C++ obtaining milliseconds time on Linux -- clock() doesn't seem to work properly

Try gettimeofday function, or boost

If you need platform independence you need to use something like ACE_High_Res_Timer (http://www.dre.vanderbilt.edu/Doxygen/5.6.8/html/ace/a00244.html)

You might want to look into using openMp.

#include <omp.h>

int main(int argc, char* argv[])
{       
    double start = omp_get_wtime();

    // code to be checked

    double end = omp_get_wtime();

    double result = end - start;

    return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!