0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Project Settingsを上から見ていきつつ自分の言葉で書いてみる Burst AOT Settings編

Last updated at Posted at 2025-12-01

image.png

前回のAdaptive Performance、Audio編が結構自分の中で面白かったので、次の項目に進もうと思います

前提

  • Unity 6000.2.14f1
  • Windows、Androidのみ

をベースに記載しています
自分が読み返した時に読みやすい文章を目指しているので
人によっては読みづらいかもです。
記載に間違いが有ったらスミマセン。

Burst AOT Settngs

Burst

先ずBurstとは何ぞや?という所から。
自分の中では並列処理を最適化できるコンパイラの認識。

詳しくは下記↓

↑に関連資料のリンクも色々あるので一度見ておきたいですね。

AOT

ではAOTとは何ぞや? ↓下記に記載あり

Ahead-Of-Time の略称であり、対義語としてJIT(Just-In-Time)がある。
違いとしては

  • JIT(Just-In-Time) … 実行時コンパイル。エディタ実行時はこちら
  • AOT(Ahead-Of-Time) … 事前コンパイル。ビルドした場合はこちら

と考えると良さそう。

その他AOTについては下記。

だけども、Burstの解説を始めると本題から逸れるので、ここからProjectSettingsの項目の記載に進みます。

本題

まぁそんなわけでこのBurst AOT Settingsは パッケージビルド時の事前コンパイルをどのように行うかの設定 、となるわけです。
詳しいマニュアルは↓

では各項目を見ていきます。

Enable Burst Compilation

これはそのまま、Burstコンパイルを行うかどうか。
これは基本チェックしたままで良いですね

Enable Optimizations

最適化を行うかどうか。同じくチェックを外す理由は無いですね
※詳細にデバッグしたい時は外した方が良いかもだけど

Force Debug Information

デバッグ情報を強制的に含めるかどうか。
デバッグをしたい時にチェックを入れる・・・のはそうとして、気になるのがマニュアルに記載のある 「チェックを入れるとリリースビルドでも情報が含まれてしまう」 という点ですね。
公開パッケージをビルドする時には自動的に無効化しておきたいオプションです。

Debug Information Kind

デバッグ情報に「行だけ」を含めるか、「すべて」を含めるかの選択ですね。
ビルド時間が変わりそうなので、これもビルド時のデバッグレベルで切り替えられると良さそうかも。

Target (Arm) 64bit CPU Architecture

ビルド時に使用するアーキテクチャを選択できるようです。プラットフォームによって選択項目は違うようで

Windows,Mac,Linux
SSE2 Streaming SIMD Extension 2。浮動小数演算用。細かく追うと長くなるので割愛。64bitCPUでは基本的にサポートされているのでチェックを入れておくべし
SSE4 Streaming SIMD Extension 4。オプション的な機能。CPUがサポートしているならば高速な命令が期待できる
AVX Advanced Vector Extensions。浮動小数演算を早くするための拡張命令セット
AVX2 Advanced Vector Extension2。浮動小数だけじゃなくて整数演算もサポートしたもの

※そもそもSIMDって何よ?
 Single Instruction, Multiple Dataの略。1つの命令で複数のデータを扱う命令セット
 

Android
ARMV8A 64bitに対応したARMのアーキテクチャ。半精度浮動小数未サポート
ARMV8A_HALFFP 半精度浮動小数をサポートする
ARMV9A 2021年に発表されたバージョン。対応CPUはまだ少ない?

の違いがあるようです。
見る感じ、 全部チェック入れておいた方が良くない?? とも思うのですが、ビルド時間やら、不測の事態を防ぐためには初期状態のままの方が良いのかしら。
よっぽど使いたい拡張命令セットがある!とか半精度浮動小数で高速化…!という必要が出た時に考える事かな。

Optimize For

読んだまま、最適化の指定。項目は下記

Default デフォルト設定。内容としてはBalanced
Performance 高速化重視
Size ビルドサイズ重視
Fast Compilation コンパイル速度重視
Balanced バランスの取れたコンパイル。速度を重視しつつも高速化を目指す

と聞くと、Defaultのままで良さそう。
あとこれ、マニュアルにも記載があるけども属性で個別に指定できるので、基本はDefaultにしておいて一部だけ指定するのでカスタマイズ性としては十分な気もするね

サンプルコードの引用
[BurstCompile(OptimizeFor = OptimizeFor.FastCompilation)]
public struct MyJob : IJob
{
    // ...
}

Floating Point Mode

これも読んでそのまま、浮動小数の精度設定

Default デフォルト設定。内容としてはStrict
Strict 最適化「無し」!
Deterministic 浮動小数の誤差を無くしてくれる?らしい。64bitの時だけなのでdoubleだけが対象
Fast 高速な代わりに、NaNやら無限大を考慮しなくなるっぽい。それはそれで怖いじゃん?

これもDefaultかなぁ…。浮動小数は下手にいじるとバグが起きやすいし。
ただ、これも属性での指定が出きるっぽいので「絶対にNaNやら無限大数が出ない確証」のあるJobなら、属性でFastを指定しちゃって良いんじゃないかな。

Disabled Warning

AOTコンパイル時の警告を無視したい場合はここに警告IDをセミコロン区切りで記載する。
これまた属性での指定も可能っぽいので、よっぽどプロジェクト全体で無視したいときだけの記載で良さそう

警告無視に関してのマニュアルは↓

Stack Protector

サポートしているアーキテクチャでだけ表示される項目(Androidは表示される)
スタックプロテクターとは何ぞや?と調べたけども、どうやらバッファオーバーフローのチェックが行えるらしい!
今回の記事でこれを知れたのが一番の収穫かもしれない? ちょうど最近調べたい場面が有ったんだよね。
項目は下記

Off スタックプロテクター無し
Basic clang --fstack-protector。バッファを使用する処理のみチェック
Strong clang --fstack-protector-strong。Basicの強力版。その分重いらしい
All clang --fstack-protector-all。バッファの使用/不使用に関わらずチェック

これも基本はOffで、ビルド時のデバッグレベルに応じて切り替えたい項目だね

Stack Protector Buffer Size

初期値8。
場合によっては値を増やすのかな?と思いきや、AIに聞いてみると「閾値サイズ」なのでサイズを下げる(例えば4Byteとか)ことで、チェック対象の処理が増えるとの事(その分重くなるらしい)

終わりに

という事で、Burst AOT Settingsの項目でした。
個人開発だとあまりBurstを触る機会は無いけど、Burstは何かを大量に処理したい場合にお世話になることがあるので覚えておくと良いですね。
いざ書いてみるとBurst以外のSSE周りの理解も深まったので、書いてみるのに良い機会だったと思います。

次回はEditorページ・・・と言いたいけど、ここから一気に項目が増えるのでキリがなくなりそうでちょっと怖いですね。。
まぁ急がず冬休みにでもやってみるかなぁ(そのころにはUnity6.3が出てそうですが)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?