1

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

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

然而,更新线程需要高精度时序以确保更新以正确的间隔发生,并且渲染线程需要高精度的帧时间进行插值,那么解决这个问题的常用方法是什么?

更新:

我现在创建了一个小型测试程序来测试这种“大幅降低”的性能。它会调用QueryPerformanceCounter100000000 次。它为一个线程执行此操作,然后在不同的内核上为两个并行线程运行它。根据文章的建议,每个线程都将其亲和性设置为不同的核心。如果您按照文章的内容进行,我的机器上的测试结果令人惊讶。

结果:

注意:这些结果包括递增循环计数器(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. 这是异常行为,还是文章对大多数现代机器不正确?

4

0 回答 0