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)
如果程序是多线程的并且在我想要测量的部分内发生了上下文切换,该怎么办?我如何衡量执行代码所花费的时间,排除在其他线程上花费的时间?即使有工具可以做到这一点,我也非常想知道他们是如何做到的.
有多种方法可以测量代码执行所需的时间。
如果您对某些功能的相对性能感兴趣,分析器是唯一的选择。请注意,这将削弱阻塞 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)
您将需要重复此块以解决线程调度差异,并且还要注意缓存效果。