Version: Unity 6.0 (6000.0)
언어 : 한국어
Android에 대한 최적화
애플리케이션 시작 시간 최적화

Android 스레드 설정

Unity는 기기의 CPU 토폴로지에 따라 스레드 선호도스레드 우선 순위를 설정합니다. Unity의 기본 스레드 구성은 대부분의 프로젝트에 적합하지만, 일부 상황에서는 스레드 구성을 변경해야 할 수 있습니다(예를 들어 특정 기기에 최적화하려는 경우나 애플리케이션이 낮은 전력 소비를 목표로 하고 높은 프레임 속도를 요구하지 않는 경우).

중요: 가능하면 Unity의 기본 설정을 사용하십시오. 특정 기기에 최적화하도록 스레드 구성을 변경하면, 변경 사항은 다른 기기 또는 같은 기기라도 차후 다른 운영체제 버전에서는 성능에 부정적인 영향을 미칠 수 있습니다.

스레드 선호도

스레드의 선호도에 따라 스레드가 실행될 CPU 코어가 제어됩니다. Android 기기의 경우 코어는 일반적으로 두 가지 카테고리로 분류됩니다.

  • 빅 코어: 배터리 전력 소비가 많은 고성능 코어
  • 리틀 코어: 빅 코어보다 배터리 전력 소비가 적은 느린 코어

중요: 다양한 Android 기기를 대상으로 하는 일반적인 애플리케이션의 경우 스레드를 특정 코어에 바인드하지 마십시오.

CPU 코어 식별

일반적으로 Unity는 기기의 운영체제에서 모든 CPU 코어에 대한 용량과 빅 코어 또는 리틀 코어 할당을 수신합니다. 이전 운영체제 버전의 경우 항상 이 정보를 사용할 수 없습니다. 이 경우 Unity는 CPU 코어의 용량을 계산하고 해당 정보를 사용하여 각 코어를 빅 코어나 리틀 코어로 할당합니다. 코어를 할당하기 위해 Unity는 각 코어의 CPU 용량을 임곗값과 비교합니다. 기본적으로 코어는 가장 느린 코어의 CPU 용량이 두 배 이상인 경우 빅 코어이고, 그렇지 않으면 리틀 코어입니다.

Unity가 어느 코어를 빅 코어나 리틀 코어로 할당할지 더 세부적으로 제어하려면 커스텀 임곗값을 지정하면 됩니다. 커스텀 임곗값을 제공하려면 0과 1024 사이의 값을 가진 -platform-android-cpucapacity-threshold [value] 커맨드 라인 인자를 사용합니다. 여기서 0은 가장 낮은 용량 코어이고 1024는 가장 높은 용량 코어입니다. 예를 들어, 1024의 약 85%에 해당하는 값인 870은 CPU 용량이 칩의 상위 15%에 해당하는 경우 빅 코어라는 의미입니다. Android 기기에서 Unity에 시작 커맨드 라인 인자를 추가하는 방법에 대한 자세한 내용은 커스텀 UnityPlayerActivity 파일의 Unity 시작 인자 지정을 참조하십시오.

참고: Unity는 항상 코어를 빅 코어나 리틀 코어로 분류합니다. 일부 복잡한 CPU 토폴로지(예를 들어, 중간 코어가 있는 토폴로지)의 경우에도 Unity는 코어를 빅 코어나 리틀 코어로 분류합니다.

스레드 선호도 별칭

Unity는 스레드 선호도 값으로 사용할 수 있는 다음과 같은 별칭을 제공합니다.

  • any: 모든 코어에서 스레드를 실행할 수 있습니다.
  • little: 리틀 코어에서 스레드를 실행할 수 있습니다.
  • big: 빅 코어에서 스레드를 실행할 수 있습니다.

16진수 값과 바이너리 값을 사용하여 스레드 선호도를 지정할 수도 있습니다. 바이너리에서는 비트의 인덱스가 특정 CPU 코어를 참조합니다. 일반적으로 리틀 코어는 인덱스 0에서 시작하고 빅 코어는 바로 그 뒤에 옵니다.

예를 들어 4개의 리틀 코어와 4개의 빅 코어가 포함된 CPU가 있습니다.

  • 바이너리 값 0b11110000과 16진수 값 0xf0을 사용하면 빅 코어에서 스레드를 실행할 수 있습니다.
  • 바이너리 값 0b1111과 16진수 값 0xf를 사용하면 리틀 코어에서 스레드를 실행할 수 있습니다.

스레드 우선순위

스레드의 우선 순위에 따라 기기의 운영체제가 CPU 시간을 스레드에 할당하는 방식이 제어됩니다. 운영체제는 우선 순위가 낮은 스레드에 비해 우선 순위가 높은 스레드에 더 많은 CPU 시간을 할당합니다.

Unity에서 사용할 수 있는 스레드 우선순위 값은 –20에서 19 사이입니다. 여기서 –20은 가장 높은 우선순위를 나타내고 19는 가장 낮은 우선순위를 나타냅니다.

설정 가능한 Unity 스레드

이 섹션은 설정할 수 있는 Unity 스레드와 이를 설정하는 데 사용하는 커맨드 라인 인자에 대한 정보를 포함하고 있습니다.

Android 기기에서 Unity에 시작 커맨드 라인 인자를 추가하는 방법에 대한 자세한 내용은 커스텀 UnityPlayerActivity 파일의 Unity 시작 인자 지정을 참조하십시오.

중요: 일부 기기와 Android OS 버전에서는 Android OS가 커맨드 라인 파라미터를 무시하고 오류를 발생시킬 수 있습니다. 이 경우 애플리케이션은 여전히 문제 없이 정상적으로 실행되지만 Android는 지정한 스레드 선호도 또는 스레드 우선 순위 설정을 적용하지 않습니다.

Unity 메인 스레드

Unity의 메인 스레드는 모든 스크립트를 실행하며 일반적으로 CPU 부하가 많습니다. 이 스레드에 영향을 주는 커맨드 라인 인자는 다음과 같습니다.

  • [value]가 스레드의 우선 순위-platform-android-unitymain-priority [value]
  • [value]가 스레드의 선호도-platform-android-unitymain-affinity [value]

Unity JobWorker 스레드

Unity의 워커 스레드는 C# 잡 시스템을 통해 코어 엔진과 애플리케이션 디스패치의 잡을 모두 실행합니다. 이러한 스레드에 영향을 주는 커맨드 라인 인자는 다음과 같습니다.

  • [value]가 스레드의 우선 순위-platform-android-jobworker-priority [value]
  • [value]가 스레드의 선호도이고 [value1 value2 value3]이 스레드당 워커 스레드의 선호도를 지정하는 데 사용할 수 있는 선택적 값인 -platform-android-jobworker-affinity [value] [value1 value2 value3] 하나의 값으로만 설정하면 Unity는 모든 워커 스레드에 동일한 값을 사용합니다. ’-job-worker-count’를 사용하여 워커 스레드의 수를 지정할 수 있습니다.

Unity 렌더 스레드

Unity의 렌더 스레드는 프로젝트에서 멀티스레드 렌더링을 사용하는 경우 그래픽스 API와 상호 작용합니다.

  • [value]가 스레드의 우선 순위-platform-android-gfxdeviceworker-priority [value]
  • [value]가 스레드의 선호도-platform-android-gfxdeviceworker-affinity [value]

참고: GraphicsJobs를 사용하는 경우 JobWorker 스레드도 그래픽스 API와 상호 작용합니다.

Android에 대한 최적화
애플리케이션 시작 시간 최적화