1 / 5

高精度计时

高精度计时. TimeGetTime 多媒体计时器,它可以提供毫秒级的计时 QueryPerformanceCount 计数器,随系统的不同可以提供微秒级的计数 Pentium CPU 内部时间戳进行计时的高精度计时 . APIC 的机器上,修改 8254 的定时间隔,截获 8254 的中断. QueryPerformanceCount 计数器. 对于实时图形处理、多媒体数据流处理、或者实时系统构造的程序员,善用 QueryPerformanceCount/QueryPerformanceFrequency 是一项基本功。. Pentium CPU 内部时间戳.

tamira
Download Presentation

高精度计时

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 高精度计时 TimeGetTime多媒体计时器,它可以提供毫秒级的计时 QueryPerformanceCount计数器,随系统的不同可以提供微秒级的计数 Pentium CPU内部时间戳进行计时的高精度计时. APIC的机器上,修改8254的定时间隔,截获8254的中断

  2. QueryPerformanceCount计数器 • 对于实时图形处理、多媒体数据流处理、或者实时系统构造的程序员,善用QueryPerformanceCount/QueryPerformanceFrequency是一项基本功。

  3. Pentium CPU内部时间戳 • Pentium以上级别的CPU中,有一个称为“时间戳(Time Stamp)”的部件,它以64位无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数。 • 机器指令RDTSC读取这个时间戳的数字 • 可以达到纳秒级的计时精度

  4. Pentium CPU内部时间戳 • 优点: • 1.高精度。可以直接达到纳秒级的计时精度(在1GHz的CPU上每个时钟周期就是一纳秒),这是其他计时方法所难以企及的。 • 2.成本低。timeGetTime 函数需要链接多媒体库winmm.lib,QueryPerformance* 函数根据MSDN的说明,需要硬件的支持,但RDTSC指令是一条CPU指令,凡是i386平台下Pentium以上的机器均支持,甚至没有平台的限制而且函数调用的开销是最小的。 • 3.具有和CPU主频直接对应的速率关系。一个计数相当于1/(CPU主频Hz数)秒,这样只要知道了CPU的主频,可以直接计算出时间。这和QueryPerformanceCount不同,后者需要通过QueryPerformanceFrequency获取当前计数器每秒的计数次数才能换算成时间。 • 缺点: • 1.现有的C/C++编译器多数不直接支持使用RDTSC指令,需要用直接嵌入机器码的方式编程,比较麻烦。 • 2.数据抖动比较厉害。其实对任何计量手段而言,精度和稳定性永远是一对矛盾。如果用低精度的timeGetTime来计时,基本上每次计时的结果都是相同的;而RDTSC指令每次结果都不一样,经常有几百甚至上千的差距。这是这种方法高精度本身固有的矛盾。 • 和CPU相关,移植性差。

  5. APIC的机器上修改8254的定时间隔 • 在基于APIC的计算机上,8254根本没有用着,系统不是用它来实现多任务调度的,不会导致会导致依赖于它的系统时钟发生混乱。 • 现在PCI总线的机器基本上都采用了APIC,因为APIC支持多处理器系统 • 在基于APIC-HAL的Windows 2000系统中,系统时钟的中断向量为0D1H,在单处理器系统中,这是正常情况下最高的中断优先级了,你必须设法使得8254的中断优先级高于它才行,否则精度难以保证。

More Related