Burstコンパイル
UnityのBurstコンパイラーを使用して、主にジョブ システムで動作するように設計されたHigh Performance C#と呼ばれるC#のサブセットでコードをコンパイルします。
読み終わるまでの所要時間 7 分最終更新 3日前
Burstは、UnityコンテキストでHPC(High-Performance C#)と呼ばれるC#のサブセットで機能するコンパイラーです。BurstはLLVMを使用して、.NET Intermediate Language(IL)をターゲットCPUアーキテクチャのパフォーマンスに最適化されたコードに変換します。
Burst はもともと Unity のジョブ システムで使用するように設計されました。ジョブは、 インターフェースを実装する構造体で、使用可能なすべての CPU コアを最大限に活用するために並列実行できる作業の小規模な単位を表します。Burst コンパイルジョブに作業を分割するようにプロジェクトを設計またはリファクタリングすると、CPU 依存コードのパフォーマンスを大幅に向上させることができます。詳細については、「 ジョブシステムでのマルチスレッドコードの記述 」を参照してください。
IJobBurst は、ジョブとは別に、静的メソッドもコンパイルできます。ただし、その中のコードがサポートされている C# のサブセットに属している必要があります。ハイパフォーマンスC#に含まれるものの詳細については、HPC#概要を参照してください。
Burstは、UnityのECS(エンティティ コンポーネント システム)テクノロジーの中核をなすものです。これには、連携してハイ パフォーマンス コードを生成する一連の相互依存パッケージが含まれています。ただし、BurstはECSとは別に使用でき、サポートされているC#機能を使用するすべてのUnityプロジェクトに統合できます。
Burst の詳細については、Burst コンパイラーパッケージドキュメントを参照してください。
コンパイルパイプラインにおける Burst の役割
Burst は C# のサブセットのみをサポートするため、完全なスクリプティングバックエンドではありません。プロジェクト内の Mono または IL2CPP を置き換えることはできませんが、いずれかを補完するものです。
Burst パッケージをプロジェクトに含めると、スクリプトバックエンドはデフォルトでコードをコンパイルし、Burst コンパイル用にマークされた Burst 互換性のある部分を Burst コンパイルします。
C# スクリプトは通常通り中間言語 (IL) にコンパイルします。Burst がマークされたメソッドの場合、その IL はさらに Burst によってネイティブコードにコンパイルされます。Burst は Unity エディターの再生モードで JIT (Just-in-Time) をコンパイルしますが、プレイヤービルドでは AOT (Ahead-of-Time) をコンパイルします。
Burst がサポートする C# のサブセットはマネージオブジェクトをサポートしません。Unityには、一般的な型とデータ構造のBurst互換性のあるバージョンを提供するように設計されたパッケージがあります。Collectionsパッケージは配列やリストなどのBurst互換性のあるCollectionsを提供し、Unity MathematicsはBurst互換性のあるMathematics機能を提供します。
Burst を使用したコンパイル
以下の条件が満たされると、コードは Burst コンパイルされます。
- コードは Burst 互換性のあるコードです。
- Burst コンパイルは、プレイヤービルドの場合は Burst AOT Settings から、Unity エディターコードの場合は Burst メニューから有効にします。
- コードが 属性で明示的にマークされているか、コードから参照されている。
[BurstCompile]
スクリプトシンボルを使用して、Burst AOT コンパイル設定が有効な場合にのみコードのセクションを条件付きでコンパイルできます。
ENABLE_BURST_AOT詳細は、「 Burst compilation 」を参照してください。