我正在尝试衡量一组陈述所花费的时间。以下是伪代码。该代码在Xilinx芯片组上用C ++实现,带有自定义RTOS,因此传统的c ++时钟功能在这里不起作用。
我不需要实际时间测量方面的帮助,但更多关于如何计算实际执行时间的数学方法。
one = clock.getTime();
/*statement
* 1 *
* to *
* 10 */
two = clock.getTime();
fTime = two - one;
现在我知道这些陈述所花费的时间。这个时间还包括getTime()的时间对吧?
one = clock.getTime();
clock.getTime();
two = clock.getTime();
cTime = two - one; //Just measure and the min value i get is 300 microseconds.
现在这个块给了我getTime()所花费的时间。
最后,我的问题是:
声明的实际时间是多少?
答案 0 :(得分:2)
您的时间测量会改变时间
如果它在足够稳定的平台上,则所有时间的移位都是相同的,所以
one = t1 + dt
two = t2 + dt
在减法之后,移位消除了自己,所以
two-one = (t2+dt)-(t1+dt) = t2-t1
因此在这种情况下无需对时间测量偏移进行校正。
问题始于代码执行可变的多标量/向量架构
依此类推,你必须使用缓存失效。此外,如果您的getTime()
等待中断或HW事件也可以添加少量错误T&#39>
在这种情况下,多次测量并获得平均或最小的有效结果,如:
答案 1 :(得分:1)
通常,在进行基准测试时,我们在计时器调用之间多次执行被测任务,然后除以任务执行次数。
这是为了
通过这种方式,您不必再担心了。
话虽如此,这可能会带来其自身的问题,尤其是在分支预测变量和缓存之类的问题上,因为前几次执行可能会使它们“预热”,从而以某种方式影响结果的准确性,不会一次运行。
正确进行基准测试可能会非常棘手,并且有大量材料可以解释如何正确进行基准测试。