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

Arm*_*yan 7 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;
Run Code Online (Sandbox Code Playgroud)

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

spr*_*aff 4

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

如果您对某些功能的相对性能感兴趣,分析器是唯一的选择。请注意,这将削弱阻塞 I/O 的影响,因为它会产生计算开销。

如果您想要某些功能的基于时钟的时间,有很多选择。

我个人认为gettimeofday就足够了。

如果你想获得精确,请使用RDTSC

如果你想变得非常精确,你会想要这样的东西

t1 = rdtsc();
t2 = rdtsc();
my_code();
t3 = rdtsc();
my_code_time = (t3-t2) - (t2-t1)
Run Code Online (Sandbox Code Playgroud)

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