API синхронизации высокого разрешения для нескольких потоков

Я пытаюсь реализовать многопоточное 3D-приложение, в котором один поток выполняет обновления сцены с постоянной скоростью (на частоте 120 Гц), а другой выполняет рендеринг (возможно, с очень коротким временем кадра, например, на частоте 400 Гц) с тройной буферизацией совместно используемых данных. Согласно Статья MSDN по времени QueryPerformanceCounter плохо работает с использованием нескольких потоков:

Вычисление синхронизации для нескольких потоков — например, с каждым потоком, связанным с конкретным процессором — значительно снижает производительность многоядерных систем.

Однако требуется высокая точность синхронизации в потоке обновления, чтобы гарантировать, что обновления происходят с правильным интервалом, и в потоке рендеринга, чтобы получить точное время кадра для интерполяции, так каков общий способ решения этой проблемы?

ОБНОВИТЬ:

Сейчас я создал небольшую тестовую программу для проверки этого «значительного снижения» производительности. Это раз пробег QueryPerformanceCounter 100000000 раз. Он делает это для одного потока, а затем запускает его для двух потоков параллельно на разных ядрах. Согласно совету статьи, каждый поток имеет свою привязку к определенному ядру. Результаты теста на моей машине удивительны, если вы идете по слову статьи.

Результаты:

Примечание. Эти результаты включают время, затраченное на увеличение счетчика цикла (64-разрядное целое число) и переход к началу цикла, поэтому фактическое время выполнения короче.

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, Это аномальное поведение, или статья некорректна для большинства современных машин?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]