假设我想测量某段代码所花费的时间。为此,我通常会做这样的事情
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/