Unity の DOTS 技術スタックは、Burst を活用して高度に最適化されたコードを提供します。Burst はスタンドアロンパッケージで、Unity 2019.4 以降のパッケージマネージャーで利用可能です。主要なデスクトップ、コンソール機、モバイルの各プラットフォーム向けに、すでに数千のプロジェクトが Burst を活用しています。
これまでの Burst のリリースで、Burst を使った毎日の開発体験を改善するための重要な 改善を行ってきました。Burst 1.7 でもその流れを引き継ぎ、イテレーション時間の短縮に注力しました。イテレーション時間とは何かC# スクリプトに変更を加え、エディターに戻り、スクリプトのコンパイルが終了するのを待ち、Burst のコンパイルが終了するのを待ち、再生モードに入って変更をテストするという、開発の「内部ループ」のことを考えてみましょう。
Burst 1.7 では、Burst の処理のために生じる待ち時間を劇的に短縮しました。Burst コンパイルは、パイプラインの早い段階(スクリプトをコンパイルするパイプラインが .NET アセンブリのコンパイルを終了した直後)で行われるようになり、多くの場合、結果のコードを実行する必要が生じるまでに終了するようになりました。以前のバージョンの Burst のように、それぞれの Burst エントリポイントを別々にコンパイルするのではなく、Burst エントリポイント(ジョブや関数ポインターなど)を一括でコンパイルするようにし、コンパイラーのスループットを向上させ、エディターがロードする必要のあるライブラリの数を減らしました。
Burst 1.7 では、直接呼び出しのパフォーマンスも大幅に改善されました。直接呼び出しは Burst 1.5 で追加された機能で、マネージド C# コードが BurstCompiler.CompileFunctionPointer を介さずに Burst コンパイルされたメソッドを直接呼び出すことを許可するものです。ドメインリロード時には、直接呼び出しのメソッドを配線するための初期化作業が必要ですが、Burst 1.7 では、この初期化作業を最大 33 倍高速化することに成功しました。
今回のイテレーション時間に関する最後の話題として、SharedStatic の初期化のコストについて調べました。SharedStatic は、マネージド C# と HPC# の間でデータの共有を可能にする仕組みです。Burst 1.7 では、SharedStatic の初期化を最大で 13 倍高速化しました。
下のグラフは、Burst 1.6 と比較して、Burst 1.7 でのパフォーマンス向上を示したものです。この測定は、顧客の大規模プロジェクトで行われました。最初のグラフは、ストップウォッチ(System.Diagnostics.Stopwatch ではなく、実際のストップウォッチ)を使ってエディターを観察したもので、実際に使っているときに期待できる改善を反映した値になっているはずです。
下の 2 つ目のグラフは、Burst だけに注目して、エディターで発生しうる他のものは除外したデータを示しています。このプロジェクトと変更されたファイルに限られてはいますが、以下の 3 つのタイミングすべてにおいて、Burst 1.7 は Burst 1.6 より高速です。
Burst インスペクター(Jobs > Burst > Open Inspector... メニューからアクセス可能)は、最適化作業に非常に便利なツールです。このツールでは、ターゲット CPU で実行されるアセンブリコードを表示することができます。Burst 1.7 では、ご要望の多かったいくつかの機能を追加しました。いろいろと言葉を連ねるより、スクリーンショットを見ていただいたほうが早いでしょう。
ご覧のように、分岐マーカーを追加して、コードの実行パスを視覚化しやすくしています。なお、分岐マーカーは「Show Branch Flow」チェックボックスでオフにできるので、不要なときでも邪魔にはなりません。この機能の特に良いところは、分岐フローの矢印をクリックすると、このように矢印の反対側にジャンプすることです。
分岐マーカーをクリックして分岐先にジャンプする例
逆アセンブルの重要度の低いブロック(ディレクティブや定数データなど)は自動的に折りたたまれるようになりましたが、これらは表示したいときにトグルで切り替えることが可能です。
また、Burst 1.7 では、分解した部分のみを選択してコピーする機能が新たに追加されました。
分解した特定の部分を選択してコピーする例
以下は、Burst 1.7 における、小さいながら重要な改良点のリストです。
Burst 1.7 は Unity 2019.4 に対応する最後のバージョンです。次の Burst バージョンでは、Unity 2020.3 が最低要件となります。 ご意見、ご質問があるとき、あるいは単に Burst で行っていることをシェアしたいというときも、Burst フォーラムに気軽にメッセージを残してください。
Is this article helpful for you?
Thank you for your feedback!