Burst Compilerざっくりまとめ

前書き

DOTS の1つである Burst Compiler について軽くまとめました。
詳しく書いてるわけではないですが、要点は抑えているつもりです。
ざっくりとした説明なので詳しい情報は調べてみてください。

注意点

2019/12/01 時点で調べた内容です。

なに?

C# Job System 専用コンパイラ。 高速なコードを吐き出す。
GCが無い前提で最適化を行う。


恩恵

処理を早くできる。


バイナリを作るまでの流れ


単語


なぜBurst Compilerを使うと早いのか?

  • LLVMの最適化が聞く
  • SIMDを使う
    • SIMD(Single Instruction Multiple Data)の略。1つの命令で複数の計算を行う仕組み。
      連続したデータ(ベクトル化)に対して1度で計算を終わらせる。
  • メモリエイリアスを考慮
    • ようわからん。


制約

  • 基本 C# Job System でしか使えない
    • ジョブ以外の任意の関数を最適化する方法はある
  • クラスが使えない
    • マネージドヒープを使う参照型は使えない(GCを避けるため)
      • クラス -> 構造体
      • 配列 -> NativeArray
      • 文字列 -> NativeString
  • 例外処理ができない
    • できない
      • try
      • catch
      • finally
    • できる
      • throw


使い方

ジョブに[BurstCompile]を付けるだけ。

using Unity.Burst;
 
public class SampleClass : MonoBehaviour
{
    [BurstCompile] // ←この属性を付けるだけ
    struct SampleStruct : IJob
    {
        public NativeArray<int> a;
        public NativeArray<int> b;

        public void Execute()
        {
            for(int i = 0; i < a.Length; ++i)
            {
                a[i] = b[i] * 10;
            }
        }
    }

    ...
    ...
}

最後に

Burstコンパイラへの対応は思った以上に簡単ぽいです。
簡単にですが、これで DOTS の1つを攻略しました。