Burst メニューのリファレンス
エディターでは、Burst メニュー内の設定を使用して Burst の動作を制御します。このメニューにアクセスするには、Jobs > Burst の順に移動します。使用可能な設定は以下のとおりです。
設定 | 機能 |
---|---|
Enable Compilation | この設定を有効にして Burst コンパイルをアクティベートします。この設定を有効にすると、[BurstCompile] 属性をタグ付けしたジョブと Burst カスタムデリゲートが Burst によってコンパイルされます。 |
Enable Safety Checks | Burst で使用する必要がある安全性チェックを選択します。詳細については、このドキュメントの Enable Safety Checks の設定 セクションを参照してください。 |
Off | すべての Burst ジョブおよび関数ポインターで安全性チェックを無効にします。エディター内キャプチャからより現実的なプロファイリング結果を得たい場合にのみ、この設定を使用してください。エディターを再ロードすると、この設定は毎回 On にリセットされます。 |
On | コレクションコンテナ (NativeArray<T> など) を使用するコードで安全性チェックを有効にします。チェックには、ジョブのデータ依存関係と境界外のコンテナインデックスが含まれます。これはデフォルトの設定です。 |
Force On | DisableSafetyChecks = true が指定されているジョブや関数ポインターにも安全性チェックを強制します。この設定は、安全性チェックで見つかった問題を除外するために使用します。 |
Synchronous Compilation | この設定を有効にすると、Burst の同期コンパイルが行われます。詳細については、同期コンパイル を参照してください。 |
Native Debug Mode Compilation | この設定を有効にすると、Burst がコンパイルするすべてのコードで最適化が非アクティブ化されます。これにより、ネイティブデバッガーを利用したデバッグが簡単になります。詳細については、ネイティブデバッグツール を参照してください。 |
Show Timings | この設定を有効にすると、エディターでジョブの JIT コンパイルにかかる時間がログに記録され、コンソールに表示されます。詳細については、このドキュメントの Show Timings 設定 セクションを参照してください。 |
Open Inspector | Burst Inspector ウィンドウ を開きます。 |
Enable Safety Checks の設定
Burst の安全性チェックコードを無効にするには、DisableSafetyChecks を使用します。これにより、コード生成は速くなりますが、コンテナを安全な方法で使用しているか確認してください。
ジョブや関数ポインターで安全性チェックを無効にするには、DisableSafetyChecks
を true
に設定します。
[BurstCompile(DisableSafetyChecks = true)]
public struct MyJob : IJob
{
// ...
}
エディターで Enable Safety Checks を On に設定した場合、Burst は、コードの安全性チェック時に、明示的に DisableSafetyChecks = true
でマークされているコードを無視します。Force On を選択すると、Burst は DisableSafetyChecks = true
でマークされているコードを含むすべてのコードの安全性チェックを行います。
Show Timings の設定
Show Timings の設定を有効にすると、Burst がコンパイルするエントリーポイントのライブラリごとに Console ウィンドウ の出力がログに記録されます。Burst はそのコンパイルをアセンブリごとに複数のメソッドという単位で一括処理し、複数のエントリーポイントを単一のコンパイルタスクにまとめます。この出力は、コンパイルでの外れ値を (Burst フォーラム を通じて) Burst コンパイラーチームに報告したい場合に便利です。
Unity では、Burst の出力が以下の主要セクションに分かれています。
- メソッドの検出 (ここで Burst はコンパイルする必要のあるものを認識する)
- フロントエンド (ここで Burst が C# IL を LLVM IR モジュールに変換する)
- ミドルエンド (ここで Burst がモジュールの特殊化、最適化、クリーンアップを行う)
- バックエンド (ここで Burst が LLVM IR モジュールをネイティブ DLL に変換する)
フロントエンドとオプティマイザーでのコンパイル時間は、コンパイルする必要がある処理の量に比例します。関数や命令が増えるほどコンパイル時間が長くなるということです。ジェネリック関数の処理のコストはゼロではないため、その数が多いほどフロントエンドのパフォーマンス時間が増加します。
バックエンドでのコンパイル時間は、モジュール内のエントリーポイントの数に応じて変化します。これは各エントリーポイントが独自のネイティブオブジェクトファイル内に存在するためです。
オプティマイザーにかなりの時間がかかる場合は、[BurstCompile(OptimizeFor = OptimizeFor.FastCompilation)]
を使用すれば、Burst での最適化数が低減する一方で、コンパイル時間は大幅に短縮されます。このトレードオフがエントリーポイントに対して適切になるよう、前後にジョブをプロファイルしてください。