プロジェクトのビルド
プロジェクトのビルド時には、Burst はコードをコンパイルし、単一の動的ライブラリを作成して、ターゲットに指定されたプラットフォームの Plugins フォルダーに配置します。例えば、Windows の場合、このパスは Data/Plugins/lib_burst_generated.dll
です。
Note
ターゲットプラットフォームが iOS の場合はこれとは異なります。Apple には TestFlight への提出要件があるため、Unity では静的ライブラリを生成します。
Job System のランタイムは、Burst でコンパイルされたメソッドが初めて呼び出されるときに、生成済みのライブラリをロードします。
Burst の AOT コンパイルを制御するには、Player Settings ウィンドウの Burst AOT Settings セクションの設定を使用します (Edit > Player Settings > Burst AOT Settings)。詳細については、Burst AOT Settings リファレンス を参照してください。
クロスコンパイルのないプラットフォーム
デスクトップ以外のプラットフォーム用にコンパイルする場合、Burst コンパイルには (IL2CPP のような) 特定のプラットフォームコンパイルツールが必要です。デスクトッププラットフォーム (macOS、Linux、Windows) のデフォルトでは、Burst AOT Settings で Use Platform SDK Linker 設定を有効にしない限り、外部ツールチェーンのサポートは必要ありません。
下の表は、各プラットフォームでの AOT コンパイルのサポートレベルを示しています。無効なターゲット (ツールがないかサポートされていない) が選択された場合、Unity は Burst コンパイルを使用しません。そのためビルドに失敗する可能性がありますが、Unity は Burst の最適化なしでターゲットをビルドします。
Note
Burst は、デフォルトでデスクトッププラットフォーム (macOS/Linux/Windows) 間のクロスコンパイルをサポートします。
ホストのエディタープラットフォーム | ターゲットのプレイヤープラットフォーム | サポートされる CPU アーキテクチャ | 外部ツールチェーンの要件 |
---|---|---|---|
Windows | Windows | x86 (SSE2、SSE4) x64 (SSE2、SSE4、AVX、AVX2) |
なし |
Windows | ユニバーサル Windows プラットフォーム (UWP) | x86 (SSE2、SSE4) x64 (SSE2、SSE4、AVX、AVX2) ARM32 (Thumb2、Neon32) ARMV8 AARCH64 ノート: UWP ビルドでは常に 4 つのターゲットすべてをコンパイルします。 |
Visual Studio 2017 ユニバーサル Windows プラットフォーム開発ワークフロー C++ ユニバーサルプラットフォームツール |
Windows | Android | x86 SSE2 ARMV7 (Thumb2、Neon32) ARMV8 AARCH64 (ARMV8A、ARMV8A_HALFFP、ARMV9A) |
Android NDK 重要: Unity Hub から (Add Component で) インストールした Android NDK を使用してください。Burst は、Unity の外部ツールの設定が行われていない場合、 ANDROID_NDK_ROOT 環境変数によって指定されている NDK にフォールバックします。 |
Windows | Magic Leap | ARMV8 AARCH64 | Lumin SDK は Magic Leap Package Manager 経由でインストールし、Unity エディター の Preferences の External Tools で設定する必要があります。 |
Windows | Xbox One | x64 SSE4 | Microsoft XDK または Microsoft GDK |
Windows | Xbox Series | x64 AVX2 | Microsoft GDK |
Windows | PlayStation 4 | x64 SSE4 | PS4 SDK バージョン 8.00 以上 |
Windows | PlayStation 5 | x64 AVX2 | PS5 SDK バージョン 2.00 以上 |
Windows | Nintendo Switch | ARMV8 AARCH64 | なし |
macOS | macOS | x64 (SSE2、SSE4、AVX、AVX2)、Apple Silicon | なし |
macOS | iOS | ARM32 Thumb2/Neon32、ARMV8 AARCH64 | コマンドラインツールをインストール済みの Xcode (xcode-select --install ) |
macOS | Android | x86 SSE2 ARMV7 (Thumb2、Neon32) ARMV8 AARCH64 (ARMV8A、ARMV8A_HALFFP、ARMV9A) |
Android NDK 重要: Unity Hub から (Add Component で) インストールした Android NDK を使用してください。Burst は、Unity の外部ツールの設定が行われていない場合、 ANDROID_NDK_ROOT 環境変数によって指定されている NDK にフォールバックします。 |
macOS | Magic Leap | ARMV8 AARCH64 | Lumin SDK は Magic Leap Package Manager 経由でインストールし、Unity エディター の Preferences の External Tools で設定する必要があります。 |
Linux | Linux | x64 (SSE2、SSE4、AVX、AVX2) | なし |
ターゲット CPU の上限はプラットフォームごとにハードコードされています。デスクトッププラットフォーム (Windows/Linux/macOS) をターゲットとするスタンドアロンビルドの場合、サポートされるターゲットは Burst AOT Settings で選択できます。
Burst に対応していないプロジェクト
プロジェクトによっては、コンパイラーに Burst を使用できないものもあります。
- Windows エディターで作成した iOS プロジェクト
- Linux エディターで作成した Android プロジェクト
- Create Xcode Project オプションで生成した Xcode プロジェクト
複数の Burst ターゲット
Burst でビルド時に複数のターゲットプラットフォームをコンパイルする場合は、別々にコンパイルを実行する必要があります。例えば、X64_SSE2
と X64_SSE4
をコンパイルする場合、Burst では、選択した各ターゲットのコードを生成するために別々に 2 回コンパイルを実行する必要があります。
ターゲットの組み合わせを最小限に抑えるために、Burst のターゲットプラットフォームには、基盤となるプロセッサー命令セットを複数用意する必要があります。
SSE4.2
はSSE4.2
とPOPCNT
命令セットを必要とします。AVX2
はAVX2
、FMA
、F16C
、BMI1
、およびBMI2
の各命令セットを必要とします。ARMV8A
は基本的な Armv8-A CPU ターゲットです。ARMV8A_HALFFP
は、ARMV8A
に拡張子fullfp16
、dotprod
、crypto
、crc
、rdm
、lse
を追加したものです。つまり、実質的には Cortex A75/A55 以降のコアです。ARMV9A
はARMV8A_HALFFP
に SVE2 サポートを追加したものです。つまり、実質的には Cortex X2/A710/A510 以降のコアです。重要: 現在、このターゲットは実験的なものです。
ランタイム CPU 機能に基づく動的ディスパッチ
すべての x86
/x64
CPU デスクトッププラットフォーム、および Android 上の 64 ビット Arm については、Burst はランタイムに利用可能な CPU 機能を考慮し、コンパイル対象のさまざまなバージョンにジョブをディスパッチします。
x86
および x64
の各 CPU の場合、Burst がランタイムにサポートする命令セットは SSE2
および SSE4
のみです。
例えば、動的 CPU ディスパッチを使用し、CPU で SSE3
以下がサポートされている場合、Burst は自動的に SSE2
を選択します。