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

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

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

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