如何从总测量执行时间中删除时钟所花费的时间?

ctr*_*esc 5 c++ math timer

我试图测量一组陈述所花费的时间.以下是伪代码.该代码在Xilinx芯片组上用C++实现,带有自定义RTOS,因此传统的c ++时钟功能在这里不起作用.

我不需要实际时间测量的帮助,但更多关于如何计算实际执行时间的数学.

one = clock.getTime();
/*statement 
*     1      *
*     to     *
*     10     */
two = clock.getTime();
fTime = two - one;
Run Code Online (Sandbox Code Playgroud)

现在我知道这些陈述所花费的时间.这个时间还包括getTime()的时间对吧?

one = clock.getTime();
clock.getTime();
two = clock.getTime();
cTime = two - one;     //Just measure and the min value i get is 300 microseconds.
Run Code Online (Sandbox Code Playgroud)

现在这个块给了我getTime()所花费的时间.

最后,我的问题是:

这些陈述的实际时间是多少?

  1. fTime - cTime
  2. fTime - (2*cTime)
  3. 其他等式?

Spe*_*tre 2

你的时间测量改变了时间

如果它位于足够稳定的平台上,那么所有时间的转变都是相同的,所以

one = t1 + dt
two = t2 + dt
Run Code Online (Sandbox Code Playgroud)

减法之后,移位会自行消除,所以

two-one = (t2+dt)-(t1+dt) = t2-t1
Run Code Online (Sandbox Code Playgroud)

因此在这种情况下无需对时间测量偏移进行校正。

问题始于多标量/向量架构,其中代码执行是可变的

  • 由于不同的缓存未命中
  • 不同的预取失效

等等,那么你就必须处理缓存失效问题。另外,如果您getTime()等待中断或硬件事件,也可能会添加一些错误 T

在这种情况下,多次测量并获得平均或最小有效结果,如下所示: