Unity 6.3
0 онлайн 85 гостей 3 в системе
Вход
Разработка платформы Шаг 82 из 387

Android конфигурация потока

Unity конфигурирует сродство потоков и приоритет потока на основе CPU топология устройства. UnityКонфигурация потока по умолчанию работает хорошо для большинства проектов, но в некоторых ситуациях, возможно, потребуется изменить конфигурацию потока (например, если вы хотите оптимизировать для конкретных устройств, или если ваше приложение направлено на низкое потребление энергии и не требует высоких частот кадров).

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

Сродство потоков

Схожесть потока определяет, на каких ядрах CPU поток должен работать. Для устройств Android ядра обычно подразделяются на две категории:

  • Большой: Мощные ядра, которые энергоемкие батареи.
  • Маленькие: более медленные ядра, которые потребляют меньше батареи, чем большие ядра.

Важно: Для типичных приложений, которые ориентированы на различные Android устройства, не привязывайте потоки к конкретным ядрам.

Идентификация CPU сердечников

Unity обычно получает мощность и назначение big/little для каждого CPU ядра от операционной системы устройства. Для более старых версий операционной системы эта информация не всегда доступна. В этом случае Unity рассчитывает мощность CPU ядер и использует эту информацию, чтобы назначить каждому ядру большую или малую мощность. Чтобы назначить ядро, Unity сравнивает CPU мощность каждого ядра с пороговым значением. По умолчанию ядро считается большим, если его мощность по меньшей мере в два раза превышает CPU мощность самого медленного ядра, и малой в противном случае.

Чтобы получить больше контроля над тем, какие ядра Unity назначает как большие или малые, можно указать пользовательский порог. Чтобы указать пользовательский порог, используйте аргумент командной строки -platform-android-cpucapacity-threshold [value] со значением от 0 до 1024, где 0 означает ядро с наименьшей емкостью, а 1024 — ядро с наибольшей емкостью. Например, значение 870, которое составляет приблизительно 85% от 1024, означает, что ядро является большим, если его CPU емкость находится в верхних 15% емкостей на чипе. Сведения о добавлении аргументов командной строки запуска для Unity на устройствах Android см. в разделе Указание аргументов запуска Unity из пользовательского файла UnityPlayerActivity.

Примечание: Unity всегда классифицирует ядро как большое или малое. Для некоторых сложных топологий CPU (например, тех, которые имеют средние ядра), Unity все еще классифицирует его ядра как большие или малые.

Псевдонимы сродства потоков

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

  • any: Разрешает потоку работать на любом ядре.
  • little: Разрешает потоку работать на любом малом ядре.
  • big: Разрешает потоку работать на любом большом ядре.

Вы также можете использовать шестнадцатеричные и двоичные значения для указания родства потоков. В двоичном формате индекс бита относится к конкретному ядру CPU. Обычно малые ядра начинаются с индекса 0, а большие ядра следуют сразу после них.

Например, если CPU содержит четыре маленьких ядра и четыре больших ядра:

  • Двоичное значение 0b11110000 и шестнадцатеричное значение 0xf0 позволяют потоку работать на больших ядрах.
  • Двоичное значение 0b1111 и шестнадцатеричное значение 0xf позволяют потоку работать на малых ядрах.

Приоритет потока

Приоритет потока контролирует, как операционная система устройства выделяет CPU время потоку. Операционная система выделяет больше CPU времени потокам с более высоким приоритетом по сравнению с потоками с более низким приоритетом.

Значения приоритета потока, которые вы можете использовать в Unity находятся в диапазоне от -20 до 19, где -20 указывает на самый высокий приоритет, а 19 указывает на самый низкий приоритет.

Настраиваемые потоки Unity

В этом разделе содержатся сведения о настраиваемых потоках Unity и аргументах командной строки, используемых для их настройки.

Сведения о добавлении аргументов командной строки запуска в Unity на устройствах Android см. в разделе Указание аргументов запуска Unity из пользовательского файла UnityPlayerActivity.

Важно: На некоторых устройствах и версиях Android OS, Android OS могут игнорировать параметры командной строки и вызывать ошибку. Если это происходит, ваше приложение все еще работает нормально без проблем, но Android не применяет установленные вами параметры родства потоков или приоритета потоков.

Unity главная поток

Главный поток Unity выполняет все скрипты и обычно имеет высокую нагрузку CPU. Аргументы командной строки, которые влияют на этот поток:

  • -platform-android-unitymain-priority [value] где [value] — это приоритет потока.
  • -platform-android-unitymain-affinity [value] где [value] — это сходство потока.

Unity JobWorker потоков

Работающие потоки Unity выполняют задания как из основного движка, так и из тех, которые отправляет ваше приложение через систему заданий C#. Аргументы командной строки, влияющие на эти потоки, следующие:

  • -platform-android-jobworker-priority [value] где [value] — это приоритет потоков.
  • -platform-android-jobworker-affinity [value] [value1 value2 value3], где [value] — это сходство потока, и [value1 value2 value3] являются необязательными значениями, которые вы можете использовать для указания сходства рабочих потоков на поток. Если вы установите только одно значение, Unity использует одно и то же значение для всех рабочих потоков. Вы можете использовать '-job-worker-count’ для указания количества рабочих потоков.

Unity поток отображения

Unity’s рендеринг поток взаимодействует с графикой API если ваш проект использует многопоточное отображение.

  • -platform-android-gfxdeviceworker-priority [value] где [value] — это приоритет потока.
  • -platform-android-gfxdeviceworker-affinity [value] где [value] — это сходство потока.

Примечание: Если вы используете GraphicsJobs, JobWorker потоки также взаимодействуют с графикой API.