我需要用纳秒来度量函数的执行时间。现在我想知道我的计算机是否可以做到这一点,以及测量的精度是多少。有人建议使用QueryPerformanceFrequency()来获取HPET的频率,1/hpetFrequency是可以测量的原子时间。是这样的吗?我的意思是,如果我的cpu频率是3.33GH,即使是1 1GHz,一个时钟持续时间也是1纳秒。这不是意味着我可以用纳秒来测量吗?
对于测量时间,CPU或HPET的频率是必不可少的,为什么?
发布于 2012-10-19 17:54:07
你不能测量到1纳秒,你也不能测量到10纳秒。这是因为每个action of measurement都需要某种调用。最快的API之一是GetSystemTimeAsFileTime()。一个呼叫需要10-15 10。但它的分辨率/粒度相当差(在ms系统中)。QueryPerformanceCounter()提供MHz到GHz范围内的频率,具体取决于底层硬件。这个调用没有那么快,但是在1 1MHz的频率下,你可以得到1微秒的分辨率。在QueryPerformanceFrequency()给定的频率下,连续调用可能会返回相等的值,因为调用比增量速率更快。另一个来源是CPU时间戳计数器(rdtsc)。但它也有一些缺点:现代硬件实现了自适应的CPU频率。因此,不能将此频率视为常量。这样,测量只可能在恒定的阶段进行。
事实上,没有一个频率源提供恒定的频率。所有这些频率都是由具有offset and drift的硬件产生的。因此,操作系统将返回一个QueryPerformanceFrequency或CPU频率的值,并使您相信它是一个常量。但是,您将获得的数字仅为close estimates。
只有在根据系统RTC校准这些频率时,才能执行真正精确的计时。有关windows上的精确计时的更多详细信息,请参见this出版物。
cpu编辑:窗口选择的Time Stamp Counter。在这种情况下,QPF()的结果等于处理器速度除以一个固定数字(在本例中为1024)。当恒定/不变的TSC可用时,Windows优先选择围绕TSC构建计时。3.33 GHz/1024=3.25 MHz。
https://stackoverflow.com/questions/12971110
复制相似问题