我试图测量一组陈述所花费的时间.以下是伪代码.该代码在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()所花费的时间.
最后,我的问题是:
这些陈述的实际时间是多少?
你的时间测量改变了时间
如果它位于足够稳定的平台上,那么所有时间的转变都是相同的,所以
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
在这种情况下,多次测量并获得平均或最小有效结果,如下所示: