c++ - 如何衡量一段代码执行的时间?

标签 c++ multithreading profiling time-measurement

假设我想测量某段代码所花费的时间。为此,我通常会做这样的事情

clock_t startTime = clock();
//do stuff
//do stuff
//do stuff
//do stuff
float secsElapsed = (float)(clock() - startTime)/CLOCKS_PER_SEC;

如果程序是多线程的并且在我要测量的部分发生上下文切换怎么办?我如何衡量我的代码执行所花费的时间,不包括花在其他线程上的时间?即使有工具可以做到这一点,我也非常想知道他们是如何做到的。

最佳答案

有多种方法可以衡量代码的执行时间。

如果您对某些函数的相对性能感兴趣,profiler是唯一的出路。请注意,这将不再强调阻塞 I/O 的影响,因为它会导致计算开销。

如果你想要 clock-based time对于某些功能,有很多选项。

我个人会说 gettimeofday就足够了。

如果你想得到精确,使用RDTSC

如果你想要真正精确,你会想要这样的东西

t1 = rdtsc();
t2 = rdtsc();
my_code();
t3 = rdtsc();
my_code_time = (t3-t2) - (t2-t1)

您需要重复此 block 以解决线程调度差异,并注意缓存效果。

关于c++ - 如何衡量一段代码执行的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7497630/

相关文章:

c++ - 如何应用位置变换

c++ - 多个 C++ 线程如何在类方法上执行

iPhone 着色器分析

c++ - 继承构造函数和虚基类

c++ - 求一次水平线的旋转度数的方程式

C++,前向声明和递归数据类型

python - 如何在python中同时运行两个同步进程

c# - 带秒表的线程安全方法

java - 如何设置 block 超时?

function - 如何在 Scala 中分析方法?