丸めモードおよび飽和モード - 2023.2 日本語

AI エンジン カーネルおよびグラフ プログラミング ガイド (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 日本語

aie::set_rounding() および aie::set_saturation() API は、to_vector 演算の丸めモードおよび飽和モードを設定します。

aie::rounding_mode には、次が含まれます。

floor
LSB を切り捨て、常に負の無限大の方向へ切り下げます。デフォルト。
ceil
値を常に正の無限大の方向へ切り上げます。
positive_inf
中間値を正の無限大の方向へ丸めます。
negative_inf
中間値を負の無限大の方向へ丸めます。
symmetric_inf
中間値を無限大の方向へ (0 から遠い方に) 丸めます。
symmetric_zero
中間値を 0 の方向へ (無限大から遠い方に) 丸めます。
conv_even
中間値を最も近い偶数値に丸めます。
conv_odd
中間値を最も近い奇数値に丸めます。

aie::saturation_mode には、次が含まれます。

none
飽和は実行せず、値の MSB 側を切り捨てます。デフォルト。
saturate
飽和を制御します。飽和によって、n ビット符号付き値が次の範囲に丸められます。
[- ( 2(n-1) ) : + 2(n-1) - 1 ]
ヘッダーなしのレポートを生成します。たとえば n = 8 の場合、範囲は [-128:127] になります。
symmetric
対称飽和を制御します。対称飽和によって、n ビット符号付き値が次の範囲に丸められます。
[- ( 2(n-1) -1 ) : + 2(n-1) - 1 ]
ヘッダーなしのレポートを生成します。たとえば n = 8 の場合、範囲は [-127:127] になります。

丸めおよび飽和設定は、AI エンジン タイルに適用されます。現在の丸めモードを取得するには aie::get_rounding メソッド、飽和モードを取得するには aie::get_saturation メソッドを使用します。

次に、丸めモードと飽和モードを設定および取得する例を示します。
aie::set_rounding(aie::rounding_mode::ceil);
aie::set_saturation(aie::saturation_mode::saturate);
aie::rounding_mode current_rnd=aie::get_rounding();
aie::saturation_mode current_sat=aie::get_saturation();
...
aie::set_rounding(aie::rounding_mode::floor);
aie::set_saturation(aie::saturation_mode::none);
注記: 丸めと飽和の設定は固定されます。これは、AI エンジン タイルのモードは変更されるまで保持されるということです。カーネルのランタイム比が 1 未満でほかのカーネルとタイルを共有でき、丸めモードと飽和モードがカーネルの動作に関係する場合は、コンストラクターや初期化関数ではなく、カーネル コードでこれらのモードを設定する必要があります。これにより、同じタイル上の別のカーネルで異なる丸めモードまたは飽和モードが使用される場合でも、適切な丸めモードおよび飽和モードが使用されます。