多线程的高分辨率计时API

时间:2013-03-06 21:17:10

标签: c++ windows visual-c++ timing

我正在尝试实现一个多线程3D应用程序,其中一个线程执行恒定速率场景更新(120Hz),另一个执行渲染(可能具有非常短的帧时间,例如400Hz),共享数据三重缓冲。根据时间QueryPerformanceCounter MSDN article,多线程使用时表现不佳:

  

计算多个线程上的时序 - 例如,每个线程与特定处理器相关联 - 大大降低了多核系统的性能。

然而,更新线程需要高精度计时以确保以正确的间隔进行更新,并且在渲染线程上为了获得精确的插值帧时间,那么解决此问题的常用方法是什么? / p>

更新

我现在已经创建了一个小型测试程序来测试性能的“大幅降低”。它计算一次调用QueryPerformanceCounter 100000000次。它为一个线程执行此操作,然后在单独的核心上并行运行两个线程。根据文章的建议,每个线程都将其亲和性设置为不同的核心。如果你按照文章的说法,我的机器上的测试结果是令人惊讶的。

结果:

注意:这些结果包括增加循环计数器(64位int)和跳转到循环开始所花费的时间,因此实际执行时间更短。

1 Thread:

   Execution in 3255313449 ns

   Approximately 32.6 ns per call

2 Threads:

Thread 1:

   Execution in 3278105881 ns

   Approximately 32.8 ns per call

Thread 2:

   Execution in 3271422015 ns

   Approximately 32.7 ns per call

这显示使用两个线程调用QueryPerformanceCounter对性能没有显着影响。这种异常行为,或者大多数现代机器的文章都不正确吗?

0 个答案:

没有答案