C++ 多线程计时的bug,千万别用clock()

来源:互联网 发布:网络摄像头ip破解软件 编辑:程序博客网 时间:2024/04/28 04:15

最近在做多线程编程,没有那么牛的使用pthread直接多线程,是对当前的算法进行优化,所以尝试了一下openmp和intel的tbb,结果发现都比原来还慢,由此引发了持续三天的debug.....

最后在使用tbb的时候发现tbb有一个自带的计时函数,调用了一下,发现比clock()函数出来的时间要快好多,上stackoverflow,,,果然有bug。

clock() measure the CPU time used by your process, not the wall-clock time. When you have multiple threads running simultaneously, you can obviously burn through CPU time much faster.

clock()函数测量的是处理器的CPU时间,而不是实际的时间或者时钟,当开启多线程的时候,就会发现实际的时间比CPU的时间快多了。

使用了其他的计时函数之后,发现果然程序快了好多倍,再用openMP也快好多倍,,,,我还以为我用错了呢。。。


参考其他博客

clock()函数的功能: 这个函数返回从“开启这个程序进程”到“程序中调用C++ clock()函数”时之间的CPU时钟计时单元(clock tick)数当程序单线程或者单核心机器运行时,这种时间的统计方法是正确的。但是如果要执行的代码多个线程并发执行时就会出问题,因为最终end-begin将会是多个核心总共执行的时钟嘀嗒数,因此造成时间偏大。

0 1