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 未満でほかのカーネルとタイルを共有でき、丸めモードと飽和モードがカーネルの動作に関係する場合は、コンストラクターや初期化関数ではなく、カーネル コードでこれらのモードを設定する必要があります。これにより、同じタイル上の別のカーネルで異なる丸めモードまたは飽和モードが使用される場合でも、適切な丸めモードおよび飽和モードが使用されます。