docs.unity3d.com
    目次を表示する/隠す

    AssumeRange 属性

    AssumeRange 属性を使用すると、指定したスカラー整数が特定の制限された範囲内に含まれることを Burst に伝えることができます。Burst にこの情報を与えると、アプリケーションのパフォーマンスを向上させることができます。以下のコードは、その例です。

    [return:AssumeRange(0u, 13u)]
    static uint WithConstrainedRange([AssumeRange(0, 26)] int x)
    {
        return (uint)x / 2u;
    }
    

    この例では、Burst に以下のことを伝えます。

    • 変数 x の範囲は [0..26] という閉区間、わかりやすくすると x >= 0 && x <= 26 である。
    • WithConstrainedRange の戻り値の範囲は [0..13] という閉区間、わかりやすくすると x >= 0 && x <= 13 である。

    Burst は、これらの想定を使用してより適切なコード生成を行います。ただし、いくつかの制限事項があります。

    • これらはスカラー整数 (符号ありまたは符号なし) 型でのみ指定できます。
    • 範囲引数の型は、属性の型と一致する必要があります。

    Burst は、NativeArray と NativeSlice の .Length プロパティについて、それらが常に負以外の整数を返すという推論を行います。

    static bool IsLengthNegative(NativeArray<float> na)
    {
        // Burst はこれを常に定数 false に置き換えます
        return na.Length < 0;
    }
    

    例えば、以下のようなコンテナがあるとします。

    struct MyContainer
    {
        public int Length;
    
        // 他のデータ...
    }
    

    以下の例は、Length が常に正の整数であることを Burst に伝える方法を示しています。

    struct MyContainer
    {
        private int _length;
    
        [return: AssumeRange(0, int.MaxValue)]
        private int LengthGetter()
        {
            return _length;
        }
    
        public int Length
        {
            get => LengthGetter();
            set => _length = value;
        }
    
        // 他のデータ...
    }
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)