固定小数点演算子のコード置換
Fixed-Point Designer™ ライセンスをお持ちの場合は、固定小数点演算子のコード置換エントリを以下と一致するように定義できます。
演算子の入力と出力における 2 進小数点のみのスケーリングの組み合わせ。
演算子の入力と出力における勾配バイアス スケーリングの組み合わせ。
乗算演算子または除算演算子の入力と出力間の相対的なスケーリングまたは正味勾配。これらのいずれかの方法を使用して、一連の勾配およびバイアス値を乗算または除算の置換関数に割り当てます。
加算演算子または減算演算子の入力と出力全体での等勾配とゼロの正味バイアス。この方法を使用して、特定の勾配とバイアス値を破棄し、相対的な勾配およびバイアス値を加算または減算の置換関数に割り当てます。
固定小数点演算子エントリを一致させる一般的な方法
次の表は、固定小数点演算子のコード置換エントリを一致させる一般的な方法と、コード置換テーブル定義ファイルで指定する関連付けられた固定小数点パラメーターの対応表です。
一致させる対象 | エントリの作成 | 最小限のパラメーターの指定 |
---|---|---|
演算子の入力と出力における特定の 2 進小数点のみのスケーリングの組み合わせ。 | RTW.TflCOperationEntry |
|
演算子の入力と出力における特定の勾配バイアス スケーリングの組み合わせ。 | RTW.TflCOperationEntry |
|
演算子の入力と出力間の正味勾配 (乗算と除算)。 | RTW.TflCOperationEntryGenerator_NetSlope | 関数
|
演算子の入力と出力間の相対的なスケーリング (乗算と除算)。 | RTW.TflCOperationEntryGenerator | 関数
|
演算子の入力と出力全体での等勾配とゼロの正味バイアス (加算と減算)。 | RTW.TflCOperationEntryGenerator | 関数
|
固定小数点数と演算
固定小数点数は、整数と整数演算を使用して、次のエンコード スキームで実数と演算を表します。
は、任意の精度をもつ実際値です。
は、固定小数点表現から求められる近似実際値です。
は、 をエンコードする整数で、"量子化整数" と呼ばれます。
は、 の係数で、"勾配" と呼ばれます。
は、追加的な補正で、"バイアス" と呼ばれます。
固定小数点オペランド間の演算の一般方程式は次のとおりです。
固定小数点演算子の置換の目的は、固定小数点または整数の入力を受け入れてその出力を返す演算子を、組み込みの C 数値データ型を受け入れて返す関数に置き換えることです。以下のセクションでは、サポートされる演算子ごとに追加のプログラミング情報を示します。
加算
演算 V0 = V1 + V2 は以下を意味します。
加算置換関数が、オペランドと和に対するスケーリングが等しく、正味バイアス
がゼロになるように定義される場合 (たとえば、2 つの符号付き 8 ビット値を加算して符号付き 8 ビットの結果を生成する関数 s8_add_s8_s8
)、演算子エントリでは、演算子エントリ パラメーター SlopesMustBeTheSame
および MustHaveZeroNetBias
を true
に設定する必要があります。置換のために一致させるには、すべての加算概念引数で勾配を同じにする必要があります。(パラメーターの説明については、関数 setTflCOperationEntryParameters
のリファレンス ページを参照してください。)
減算
演算 V0 = V1 − V2 は以下を意味します。
減算置換関数が、オペランドと差に対するスケーリングが等しく、正味バイアス
がゼロになるように定義される場合 (たとえば、2 つの符号付き 8 ビット値を減算して符号付き 8 ビットの結果を生成する関数 s8_sub_s8_s8
)、演算子エントリでは、演算子エントリ パラメーター SlopesMustBeTheSame
および MustHaveZeroNetBias
を true
に設定する必要があります。置換のために一致させるには、すべての減算概念引数で勾配を同じにする必要があります。(パラメーターの説明については、関数 setTflCOperationEntryParameters
のリファレンス ページを参照してください。)
乗算
乗算の置換を指定するにはさまざまな方法があります。最も直接的な方法は、完全一致する入力と出力の型を指定する方法です。これは、勾配とバイアスの既知の組み合わせがモデルに少ししか含まれていない場合に実現できます。TflCOperationEntry
クラスを使用して、引数ごとに勾配とバイアスの正確な値を指定します。勾配とバイアスの組み合わせが多数ある状況では、異なるエントリでそれぞれの値を指定することはできません。正味勾配エントリを使用するか、カスタム エントリを作成します。
演算 V0 = V1 * V2 は、2 進小数点のみのスケーリングの場合、以下を意味します。
ここで、Sn は正味勾配です。
一般的に、正味勾配が 1.0 のすべての乗算演算を、C スタイルの乗算を実行する関数に置き換えます。たとえば、正味スケーリングが 1.0 のすべての符号付き 8 ビット乗算を置換関数 s8_mul_s8_u8_
に置き換えるには、演算子エントリで正味勾配係数 F2E を定義する必要があります。F と E の値は、演算子エントリ パラメーター NetSlopeAdjustmentFactor
および NetFixedExponent
を使用して指定します。関数 s8_mul_s8_u8
の場合、NetSlopeAdjustmentFactor
を 1 に、NetFixedExponent
を 0.0 に設定します。また、演算子エントリ パラメーター SlopesMustBeTheSame
を false
に、パラメーター MustHaveZeroNetBias
を true
に設定します。置換のために一致させるには、すべての乗算概念引数でバイアスをゼロにする必要があります。(パラメーターの説明については、関数 setTflCOperationEntryParameters
のリファレンス ページを参照してください。)
メモ
演算子エントリで NetSlopeAdjustmentFactor
と NetFixedExponent
が指定されている場合、一致するエントリはバイアスがゼロの引数をもつ必要があります。
除算
除算の置換を指定するにはさまざまな方法があります。最も直接的な方法は、完全一致する入力と出力の型を指定する方法です。これは、勾配とバイアスの既知の組み合わせがモデルに少ししか含まれていない場合に実現できます。TflCOperationEntry
クラスを使用して、引数ごとに勾配とバイアスの正確な値を指定します。勾配とバイアスの組み合わせが多数ある状況では、異なるエントリでそれぞれの値を指定することはできません。正味勾配エントリを使用するか、カスタム エントリを作成します (Customize Match and Replacement Processを参照)。
演算 V0 = (V1 / V2) は、2 進小数点のみのスケーリングの場合、以下を意味します。
ここで、Sn は正味勾配です。
一般的に、正味勾配が 1.0 のすべての除算演算を、C スタイルの除算を実行する関数に置き換えます。たとえば、正味スケーリングが 1.0 のすべての符号付き 8 ビット除算を置換関数 s16_netslope0p5_div_s16_s16
に置き換えるには、演算子エントリで正味勾配係数 F2E を定義する必要があります。F と E の値は、演算子エントリ パラメーター NetSlopeAdjustmentFactor
および NetFixedExponent
を使用して指定します。関数 s16_netslope0p5_div_s16_s16
の場合、NetSlopeAdjustmentFactor
を 1 に、NetFixedExponent
を 0.0 に設定します。また、演算子エントリ パラメーター SlopesMustBeTheSame
を false
に、パラメーター MustHaveZeroNetBias
を true
に設定します。置換のために一致させるには、すべての除算概念引数でバイアスをゼロにする必要があります。(パラメーターの説明については、関数 setTflCOperationEntryParameters
のリファレンス ページを参照してください。)
メモ
演算子エントリで NetSlopeAdjustmentFactor
と NetFixedExponent
が指定されている場合、一致するエントリはバイアスがゼロの引数をもつ必要があります。
データ型の変換 (キャスト)
データ型の変換演算 V0 = V1 は、2 進小数点のみのスケーリングの場合、以下を意味します。
ここで、Sn は正味勾配です。演算子エントリ パラメーター SlopesMustBeTheSame
を false
に、パラメーター MustHaveZeroNetBias
を true
に設定します。置換のために一致させるには、すべてのキャスト概念引数でバイアスをゼロにする必要があります。(パラメーターの説明については、関数 setTflCOperationEntryParameters
のリファレンス ページを参照してください。)
シフト
左シフトまたは右シフト演算 V0 = (V1 / 2n) は、2 進小数点のみのスケーリングの場合、以下を意味します。
ここで、Sn は正味勾配です。演算子エントリ パラメーター SlopesMustBeTheSame
を false
に、パラメーター MustHaveZeroNetBias
を true
に設定します。置換のために一致させるには、すべてのシフト概念引数でバイアスをゼロにする必要があります。(パラメーターの説明については、関数 setTflCOperationEntryParameters
のリファレンス ページを参照してください。)
関連するトピック
- Code You Can Replace From Simulink Models
- Define Code Replacement Library Optimizations
- Binary-Point-Only Scaling Code Replacement
- 勾配バイアス スケーリングのコード置換
- Net Slope Scaling Code Replacement
- 等勾配とゼロの正味バイアスのコード置換
- データ型の変換 (キャスト) と演算子のコード置換
- 左シフト演算とコード置換
- Data Alignment for Code Replacement
- Remap Operator Output to Function Input
- Customize Match and Replacement Process
- コード置換ライブラリの開発