Анализ планирования потоков

Чтобы определить, насколько эффективно используются и планируются потоки игрового процесса для достижения оптимальной производительности, следует учесть несколько моментов.

  • темп кадров
  • Многопоточность и распараллеливание потоков
  • привязка ядер ЦП

Многопоточность

Многие игры и игровые движки используют многопоточность для разделения работы процессора на логические задачи, которые могут выполняться относительно независимо друг от друга. Типичная конфигурация включает игровой поток для ввода и игровой логики, поток рендеринга для подготовки и отправки объектов для отрисовки, а также рабочие потоки для других подзадач, таких как анимация или звук.

Мы рекомендуем распараллеливать потоки, чтобы воспользоваться преимуществами многопоточности с точки зрения повышения производительности. Примером может служить сценарий, когда игровые и рендеринговые потоки частично или полностью выполняются одновременно на разных ядрах. Это не всегда возможно, например, в случаях с общими зависимостями данных; однако, если это возможно, это может привести к сокращению времени работы процессора и, следовательно, потенциально к увеличению частоты кадров.

Игра с хорошо распараллеленными основным и рендеринговым потоками, а также рабочим потоком и потоком обработки звука.
Рисунок 1. Игра с хорошо распараллеленными основным и рендеринговым потоками, а также рабочим потоком и потоком обработки звука.

привязка ядер ЦП

Одним из факторов, существенно влияющих на производительность процессорных нагрузок, является способ их планирования на ядрах. Это можно разделить на два компонента:

  • Проверьте, работают ли игровые потоки на наиболее подходящем ядре для своей рабочей нагрузки.
  • Часто ли потоки в вашей игре переключаются между ядрами.

В современных устройствах часто используется архитектура, называемая гетерогенными вычислениями , где ядра имеют разные уровни производительности:

  • Одно или несколько ядер обеспечивают максимальную пиковую производительность, но потребляют больше энергии. Их иногда называют «большими» ядрами.
  • Другие ядра обладают меньшей пиковой производительностью, но при этом более энергоэффективны. Их иногда называют «маленькими» ядрами.
  • Дополнительно: одно или несколько ядер обеспечивают баланс между производительностью и энергопотреблением. Их иногда называют «средними» ядрами.

Вы можете исследовать поведение потоков ЦП в разделе «Использование ЦП» , включив ЦП в конфигурации профиля при создании трассировки. Увеличив масштаб участка трассировки (<200 мс), вы можете увидеть отдельные процессы, работающие на ядрах ЦП вашего устройства. Как правило, меньшие ядра соответствуют меньшим индексам (например, ЦП '0'-'3'), тогда как большие ядра соответствуют большим индексам (например, ЦП '6'-'7'), а средние ядра, если они присутствуют, будут занимать промежуточные индексы (например, ЦП '5'-'6'). Это общепринятая практика, но она не гарантирует правильности.

Если вы обнаружите, что определенные потоки планируются на процессорах, которые не соответствуют их потребностям в производительности или энергопотреблении, рассмотрите возможность ручной настройки привязки этих потоков к процессорам.

Игра, в которой основной поток и поток рендеринга в основном работают на больших ядрах (процессор 6-7), показанных светло-голубым цветом.
Рисунок 2. Игра, в которой основной поток и поток рендеринга работают преимущественно на больших ядрах (процессоры 6-7), показанных светло-голубым цветом.

Вы также можете понаблюдать, переключаются ли ваши потоки между ядрами. Такие переключения между ядрами приводят к некоторым накладным расходам, связанным с переключением контекста и потерей состояния кэша/регистров ядра.

Игра с основным потоком (поток 7) и потоком рендеринга (поток 8), переключающимися между ядрами, показана фиолетовым цветом.
Рисунок 3. Игра с основным потоком (поток 7) и потоком рендеринга (поток 8), переключающимися между ядрами, показанными фиолетовым цветом.

Установка приоритета процессора для потока указывает системе планировать его выполнение на заданном ядре, когда игра находится в фоновом режиме. При этом следует учитывать несколько факторов:

  • Программное обеспечение платформы не может динамически корректировать размещение задач с учетом таких факторов, как нагрузка и температурный троттлинг, возникающие во время выполнения.
  • Тестирование производительности на разных устройствах может показать совершенно разные результаты, особенно если устройства значительно различаются по цене или дате выпуска.

    Более новое или дорогое устройство может без проблем справиться с заданной рабочей нагрузкой на небольшом ядре, в то время как более старое или более доступное устройство может потребовать более мощного ядра для выполнения той же рабочей нагрузки в установленные сроки.

  • Навязывание приоритета большим ядрам может привести к неоправданному увеличению расхода заряда батареи и тепловой нагрузки.

По этим причинам, как правило, лучше избегать ручной настройки приоритета процессора.