你的代码中的高分辨率计时部分

7
我想要在循环中测量函数的速度。但为什么我的做法总是打印出“0”,而不是高分辨率计时,保留9位小数精度(即以纳秒/微秒为单位)?
正确的方法是什么?
#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;
}

相关问题:


1
+1 这正是我正在寻找的链接! - dirkgently
6个回答

6
将时间计算函数移出for () { .. }语句,然后将总执行时间除以测试循环中的操作次数。
#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;
}

注意:std::clock()的精度不足以进行性能分析。参考文献

你需要除以100来得到每个循环的时间 - Chris Huang-Leaver

3

一些提示:

  1. 小心使用优化器,如果它认为没有做任何事情,可能会抛出您的所有代码。
  2. 您可能希望循环运行100000次。
  3. 在进行总时间计算之前,将当前时间存储在一个变量中。
  4. 多次运行程序。

3

2

2

1

你也许想要研究一下使用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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接