unityでいってみよう!

unityがチョットワカル位の人のブログ

WorkerThreadの数を変更する

はじめに

Unity2019.3からJob Systemが使用しているWorker Threadの数を変更出来るAPIが追加されていたことにお気付きでしょうか。

自身で用意したThreadやサードパーティー製のミドルウェアがThreadを使用している場合、Worker Thradの数を減らし、逆にWorker Threadの数を増やすことで、Job Systemが受けも持つTaskを短い時間で終わらせるこが期待できます。

 

API

Worker Threadの数を指定するAPI

JobsUtility.JobWorkerCountです。

 

docs.unity3d.com

 

このプロパティに設定可能な値は1以上、JobsUtility.JobWorkerMaximumCount以下です。

範囲外の値を指定した場合は例外がThrowされます。

 

Note

一部のプラットフォーム(確認した限りではAndroid)では、OSからのイベント(例えば、省電力モードのON・OFF)に応じて、Worker Threadの数はUnity内で自動的に制御されていますが、このAPIを使用した場合は、この値が優先されることに注意が必要です。

 

 

 

JobsUtility.JobWorkerMaximumCount

JobsUtility.JobWorkerMaximumCountの値はプラットフォーム毎に異なります。

多くのプラットフォームではコア数-1が使用されます。

Androidの場合、CPUがBig-Little構成の場合、Big側のコア数が使用され、それ以外の場合、コア数ー1が使用されます。

※最近はBig-Middle-Little構成の端末もありますが、その場合どうなるんですかね。 

 

検証

CandyRockStart Projectを用いてJobsUtility.JobWorkerMaximumCountの値を1~3に変更することで実際のWorker Threadの数が変わるのかsystraceで検証を行いました。

検証に使用した端末はPixel3XLです。

unity-chan.com

 

JobsUtility.JobWorkerCount = 1

 

JobsUtility.JobWorkerCount = 2

 

JobsUtility.JobWorkerCount = 3

 

確かにWorker Threadの数が変わっているので正しく動作しているようです。

(Unityにしては珍しい・・・)

 

まとめ

基本的にWorkerThreadの数はUnityに任せておいた方が良いケースが多いと思いますが、AnimatorやC# Jobsystemを使用していないなど、Unity Profilerを見た時に殆ど使用していないのであれば、Worker Threadの数を減らした方が良いケースもありますし、その逆で増やした方が良いケースもあると思います。

そういった場合は、こちらのAPIでWorkerThreadの数を変更してみることをお勧めします。