BurstCompile 属性
Burst のパフォーマンスを高めるために、[BurstCompile]
属性を使用してジョブのコンパイル時の動作を変更できます。この属性を使用すると、以下のことが可能です。
- 数学関数 (例: sin、cos) にさまざまな精度を適用する。
- 数値計算の順序を緩和して、Burst で浮動小数点演算を並べ替えられるようにする。
- ジョブの同期コンパイルを強制する (実行時コンパイル の場合のみ)。
例えば、[BurstCompile]
属性を以下のように使用することで、Burst の 浮動小数点数の精度 と 浮動小数点演算モード を変更できます。
[BurstCompile(FloatPrecision.Med, FloatMode.Fast)]
FloatPrecision
FloatPrecision
列挙型を使用して、Burst の浮動小数点数の精度を定義します。
浮動小数点数の精度は ulp (最終桁単位、または最小精度単位) で測定されます。これは浮動小数点数の間の空間であり、最下位の数字が 1 の場合に表す値です。Unity.Burst.FloatPrecision
では以下の精度を使用できます。
FloatPrecision.Standard
: 初期値。FloatPrecision.Medium
. と同じです。精度を 3.5 ulp に指定します。FloatPrecision.High
: 精度を 1.0 ulp に指定します。FloatPrecision.Medium
: 精度を 3.5 ulp に指定します。FloatPrecision.Low
: 関数ごとに定義された精度を使用します。関数では有効な入力範囲が制限されている場合があります。
ノート: 以前のバージョンの Burst API では、FloatPrecision
enum は Accuracy
という名前でした。
FloatPrecision.Low
FloatPrecision.Low
モードを使用する場合、以下の関数の精度は 350.0 ulp となります。その他の関数はすべて FloatPrecision.Medium
の ulp を継承します。
Unity.Mathematics.math.sin(x)
Unity.Mathematics.math.cos(x)
Unity.Mathematics.math.exp(x)
Unity.Mathematics.math.exp2(x)
Unity.Mathematics.math.exp10(x)
Unity.Mathematics.math.log(x)
Unity.Mathematics.math.log2(x)
Unity.Mathematics.math.log10(x)
Unity.Mathematics.math.pow(x, y)
- 負の数
x
のy
(小数) 乗はサポートされません。
- 負の数
Unity.Mathematics.math.fmod(x, y)
FloatMode
FloatMode
列挙型を使用して、Burst の浮動小数点演算モードを定義します。以下のモードが用意されています。
FloatMode.Default
: デフォルトはFloatMode.Strict
モードです。FloatMode.Strict
: Burst は計算の再配置を行わず、特殊な浮動小数点値 (denormal、NaN など) を優先します。これがデフォルト値です。FloatMode.Fast
: Burst に命令の再配置の実行と、専用または低精度のハードウェア SIMD 命令の使用を許可します。FloatMode.Deterministic
: 未対応です。このモードは今後の Burst のイテレーション用に予約されています。
ハードウェアで乗算と加算 (例: mad a * b + c
) を 1 つの命令としてサポート可能な場合は、FloatMode.Fast
を使用するとこの最適化を有効にできます。ただし、これらの命令の順序を並べ替えると、精度が低下する可能性があります。
FloatMode.Fast
は、計算順序の正確性や NaN 値処理の統一が必要とされないシナリオで使用してください。