Unity는 기기의 CPU 토폴로지를 기반으로 스레드 선호도와 스레드 우선순위를 설정합니다. Unity의 기본 스레드 설정은 대부분 프로젝트에 적합하지만, 일부 상황에서는 스레드 설정을 변경해야 할 수 있습니다. (예를 들어 특정 기기에 최적화하려는 경우 또는 애플리케이션이 낮은 전력 소비를 목표로 하고 높은 프레임 속도를 요구하지 않는 경우 스레드 설정을 변경할 수 있습니다.)
중요: 가능하면 Unity의 기본 설정을 사용하십시오. 특정 기기에 최적화하도록 스레드 설정을 변경하면, 변경 사항은 다른 기기 또는 같은 기기라도 차후 다른 운영체제 버전에서는 성능에 부정적인 영향을 미칠 수 있습니다.
스레드의 선호도는 스레드를 실행할 CPU 코어를 제어합니다. Android 기기의 경우 일반적으로 두 가지 카테고리로 코어를 나눕니다.
중요: 다양한 Android 기기를 대상으로 하는 일반적인 애플리케이션의 경우 스레드를 특정 코어에 바인드하지 마십시오.
Unity는 일반적으로 기기의 운영체제로부터 모든 CPU 코어의 처리 능력과 빅/리틀 코어를 할당받습니다. 이전 버전의 운영체제인 경우 이 정보를 항상 사용할 수는 없습니다. 이 경우 Unity는 CPU 코어의 처리 능력을 계산하고 해당 정보를 사용하여 빅 코어나 리틀 코어에 할당합니다. 코어를 할당하기 위해 Unity는 각 코어의 CPU 처리 능력을 임계값과 비교합니다. 기본적으로 가장 느린 코어의 CPU 처리 능력의 두 배 이상인 코어는 빅 코어이고, 그렇지 않은 경우에는 리틀 코어입니다.
For more control over which cores Unity assigns as big or little, you can provide a custom threshold. To provide a custom threshold, use the -platform-android-cpucapacity-threshold [value]
command-line argument with a value between 0 and 1024 where 0 represents the lowest capacity core and 1024 represents the highest capacity core. For example, a value of 870
, which is approximately 85% of 1024, means that a core is big if its CPU capacity is in the top 15% of those on the chip. For information on how to add start-up command-line arguments to Unity on Android devices, see Specify Unity startup arguments from a custom UnityPlayerActivity file.
참고: 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 스레드와 이를 설정하는 데 사용하는 커맨드 라인 인자에 대한 정보를 포함하고 있습니다.
For information on how to add startup command-line arguments to Unity on Android devices, see Specify Unity startup arguments from a custom UnityPlayerActivity file.
Important: On some devices and Android OS versions, the Android OS might ignore command-line parameters and throw an error. If this occurs, you application still runs normally without issue, but Android doesn’t apply the thread affinity or thread priority settings that you specified.
Unity의 메인 스레드는 모든 스크립트를 실행하며 일반적으로 CPU 부하가 높습니다. 이 스레드에 영향을 주는 커맨드 라인 인자는 다음과 같습니다.
-platform-android-unitymain-priority [value]
여기서 [value]
는 스레드의 우선순위입니다.-platform-android-unitymain-affinity [value]
여기서 [value]
는 스레드의 선호도입니다.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의 렌더 스레드는 프로젝트에서 멀티스레드 렌더링을 사용하는 경우 그래픽스 API와 상호작용합니다.
-platform-android-gfxdeviceworker-priority [value]
여기서 [value]
는 스레드의 우선순위입니다.-platform-android-gfxdeviceworker-affinity [value]
여기서 [value]
는 스레드의 선호도입니다.참고: GraphicsJobs를 사용하는 경우 JobWorker 스레드도 그래픽스 API와 상호 작용합니다.