2009-04-15 10 views
4

给定一个以最高优先级运行并请求当前时间的C进程,返回时间是否调整了代码返回到用户进程空间的时间量?它是否过时,当你得到它?作为一种测量,将已知数量的汇编指令的执行时间放在一个循环中,并要求在它之前和之后的时间给出一个近似的误差。我知道这在科学应用中一定是个问题吗?我不打算在不久的将来随时编写涉及任何超级对撞机的软件。我已经阅读了关于这个主题的一些文章,但他们并没有表明做出任何更正,以使得给予你的时间略微超过系统读入的时间。我是否应该对其他事情失眠?在函数返回时,高分辨率调用是否使系统时间错误?

回答

6

是的,他们几乎肯定是“错误的”。

对于Windows,计时功能不考虑转换回用户模式所需的时间。即使考虑到这一点,如果函数返回,它也无法纠正,并且在捕获返回值之前,您的代码会遇到页错误/被换出/ etc。通常情况下,在计时时,应该围绕大量迭代捕捉开始和结束时间,以消除这些不确定性。

+0

他们会不会是错的相同的量,如果我做了很多人:( – ojblass 2009-04-16 02:29:51

+0

开销就会有噪音,如果你做的足够的迭代,你在大集的开始和结束时间捕捉(比如10K)并通过迭代次数除以总时间 – Michael 2009-04-16 02:41:21

3

是的,你得到的答案将会被一定的(微小的)量所关闭;我从来没有听说过计时器功能可以补偿平均返回时间,因为这样的事情几乎不可能很好地预测。通常只需读取硬件中的寄存器并返回值,或将其版本缩放到适当的时间范围即可实现。

这就是说,我不会因此而失眠。保持这种开销不会以任何重要方式影响测量结果的可接受方式是不要将这些定时器用于短期事件。通常,你会花费数百,数千或数百万次执行同样的事情,除以执行次数来估计平均时间。这样的事情通常比计算单个实例更有用,因为它考虑了平均缓存行为,操作系统影响等等。

+0

否是指我的问题,如果我读这个权利 – ojblass 2009-04-16 00:16:23

+0

确实;它是一个肯定的“是过时的,当你明白了吗?”,但没有对问题在标题提出的问题。编辑的清晰度。 – 2009-04-16 01:37:29

3

不,你不应该为此失眠。在带有多层内存访问的流水线处理器的系统上运行带有内存管理,设备,中断处理程序的多任务操作系统,任何调整或其他软件欺骗都不会产生完美结果......即使您的进程拥有最高优先级。

另外,考虑到的差异这两个这样的时间将抵消不断的开销,无论如何。

编辑:我的意思是是的,你应该失去睡眠其他东西:)。

1

涉及高分辨率计时器的大多数现实世界问题都用于分析,其中时间在开始期间读取一次,在FINISH期间再次读取一次。所以大部分时间〜差不多相同的延迟量都涉及STARTFINISH。因此它工作正常。

现在,对于核反应堆,WINDOWS或其他许多具有通用功能的操作系统可能并不合适。我猜他们使用REAL TIME操作系统,它可能比桌面操作系统提供更准确的时间值。

相关问题