如果一个C进程以请求当前时间的最高优先级运行,那么返回的时间是否因代码返回用户进程空间所花费的时间而调整?你拿到它时过时了吗?作为一种测量,在循环中获取已知数量的汇编指令的执行时间,并询问它之前和之后的时间可以给出误差的近似值。我知道这一定是科学应用中的一个问题吗?我不打算在不久的将来随时编写涉及任何超级碰撞器的软件。我已经阅读了一些关于这个主题的文章,但它们并没有表明是否进行任何修正以使得给你的时间略早于系统读入的时间。我是否应该在其他事情上失眠?
答案 0 :(得分:6)
是的,他们几乎肯定是“错误的”。
对于Windows,计时功能不考虑转换回用户模式所需的时间。即使考虑到这一点,它也无法纠正函数是否返回,并且在捕获返回值之前,代码遇到页面错误/被换出/等等。
一般来说,在计时时你应该在大量迭代中捕捉开始和结束时间,以消除这些不确定性。
答案 1 :(得分:3)
是的,你得到的答案会被某个(小的)金额所取消;我从未听说过补偿平均返回时间的计时器功能,因为这样的事情几乎不可能很好地预测。这些事情通常只需通过简单地读取硬件中的寄存器并返回值,或者将其版本缩放到适当的时间刻度来实现。
那就是说,我不会为此而失眠。保持这种开销不会以任何重要方式影响测量的公认方法是不要将这些计时器用于短事件。通常,您将对同一事物执行数百,数千或数百次执行,并除以执行次数以估计平均时间。这样的事情通常比计时单个实例更有用,因为它考虑了平均缓存行为,操作系统效果等等。
答案 2 :(得分:3)
不,你不应该为此而失眠。在具有多层内存访问的流水线处理器系统上运行具有内存管理,设备,中断处理程序的多任务操作系统时,任何调整或其他软件技巧都不会产生完美的结果......即使您的进程具有最高优先级。
另外,取两次这样的差异将取消不断的开销。
编辑:我的意思是是,你应该在其他事情上失眠:)。
答案 3 :(得分:1)
涉及高分辨率计时器的大多数现实问题都用于分析,其中在START期间读取一次,在FINISH期间再读一次。所以大部分时间〜 START 和 FINISH 的延迟几乎相同。因此它工作正常。
现在,对于核反应堆,WINDOWS或许多其他具有通用功能的操作系统可能不适用。我猜他们使用 REAL TIME 操作系统,这可能比桌面操作系统提供更准确的时间值。