Main Content

算術とスケーリングの推奨事項

算術演算と固定小数点のスケーリング

以下の節では、算術演算と固定小数点のスケーリングの関係について説明し、固定小数点の設計に適した基本的な推奨事項を提供します。各算術演算に対し、次の条件が適用されます。

  • スケーリングで説明されている、一般的な [勾配 バイアス] エンコード スキームが使用されます。

  • 結果のスケーリングは 2 つの入力のスケーリングに基づいて自動的に選択されます。つまり、スケーリングは継承されます。

  • スケーリングは以下の条件に基づいて選択されます。

    • 結果の算術演算数を最小化する

    • 結果の精度を最大化する

    また、一般的なエンコード スキームの特殊なケースとして 2 進小数点のみスケーリングが紹介されます。

組み込みシステムでは、ハードウェア インターフェイス (ADC または DAC) での変数のスケーリングは修正されます。ただし、他のほとんどの変数に対しては、最適な設計をもたらすスケーリングを選択できます。固定小数点変数をスケーリングするときは、以下の点に留意することが重要です。

  • スケーリングは、シミュレーションする特定の設計に応じて選択します。

  • 最適なスケーリング法というものは存在しません。すべての選択には利点と不便な点があります。この節の目的は、これらの利点と不便な点を明確に示すことです。

加算

次の 2 つの実際値の加算を考えてみてください。

Va=Vb+Vc.

これらの値は、スケーリングで説明されている一般的な [勾配 バイアス] エンコード スキームによって表現されます。

Vi=Fi2EiQi+Bi.

固定小数点システムでは、これらの値の加算は、変数 Qa を求めることになります。

Qa=FbFa2EbEaQb+FcFa2EcEaQc+Bb+BcBaFa2Ea.

この式は、次のことを示します。

  • 一般的に、QaQbQc の単純な加算によって計算されるものではありません。

  • 通常は、定数と変数の 2 回の乗算、2 回の加算、さらにビットのシフトが行われます。

速度向上のための継承スケーリング

合計のスケーリングを見つける課程における 1 つの妥当な目標は、計算を簡潔化することです。計算を簡潔化すると、演算数の削減により、実行速度が向上します。以下の選択肢は、算術演算数の最小化に役立ちます。

  • Ba = Bb + Bc を設定する。これで 1 つの加算が取り除かれます。

  • Fa = Fb または Fa = Fc を設定する。どちらを選択した場合でも、2 回の定数と変数の乗算のどちらかが取り除かれます。

最終的な式は次のようになります。

Qa=2EbEaQb+FcFa2EcEaQc

または

Qa=FbFa2EbEaQb+2EcEaQc.

これらの式は、同等であるように見えます。ただし、丸めと精度の選択により、片方の式が有利になる場合があります。さらに簡潔にするには、Ea = Ec または Ea = Eb を選択できます。これにより、一部のビット シフトが取り除かれます。

精度の最大化のための継承スケーリング

合計のスケーリングを見つける課程における 1 つの妥当な目標は、精度を最大化することです。変数の範囲がわかっている場合は、最大精度のスケーリングを判断できます。精度の最大化では、固定小数点演算の範囲を max(Va)min(Va) から判断できることを示しています。加算の場合は、以下から範囲を判断できます。

min(V˜a)=min(V˜b)+min(V˜c),max(V˜a)=max(V˜b)+max(V˜c).

これで、最大精度の勾配を求めることができます。

Fa2Ea=max(V˜a)min(V˜a)2wsa1=Fa2Eb(2wsb1)+Fc2Ec(2wsc1)2wsa1.

ほとんどの場合、入力と出力のワード サイズは 1 よりもはるかに大きく、勾配は次のようになります。

Fa2EaFb2Eb+wsbwsa+Fc2Ec+wscwsa,

これは、入力と出力の語長のみに依存します。対応するバイアスは次のとおりです。

Ba=min(V˜a)Fa2Eamin(Qa).

バイアスの値は、入力と出力が符号付き数値または符号なし数値のどちらであるかに依存します。

入力と出力がすべて符号なしの場合、これらの変数の最小値はすべてゼロになり、バイアスは以下の非常に単純な形式になります。

Ba=Bb+Bc.

入力と出力がすべて符号付きの場合、バイアスは以下のようになります。

BaBb+Bc+Fb2Eb(2wsb1+2wsb1)+Fc2Ec(2wsc1+2wsc1),BaBb+Bc.

2 進小数点のみのスケーリング

2 進小数点のみのスケーリングでは、Qa は以下の単純な式で求められます。

Qa=2EbEaQb+2EcEaQc.

このスケーリングでは、1 回の加算とビット シフトのみが必要になります。乗算の回避は、2 進小数点のみのスケーリングの大きな利点です。

メモ

値の減算では、値の加算結果に似た結果がもたらされます。

累積

値の累積は、加算に密接に関連しています。

Va_new=Va_old+Vb.

Qa_new を求めるには、定数と変数の 1 回の乗算、2 回の加算、およびビット シフトが必要です。

Qa_new=Qa_old+FbFa2EbEaQb+BbFa2Ea.

固定小数点の実装に対する重要な相違は、出力のスケーリングが最初の入力のスケーリングと同じになることです。

2 進小数点のみのスケーリング

2 進小数点のみのスケーリングでは、Qa_new は以下の単純な式で求められます。

Qa_new=Qa_old+2EbEaQb.

このスケーリングでは、1 回の加算とビット シフトのみが必要になります。

メモ

値の負の累積では、値の累積結果に似た結果がもたらされます。

乗算

次の 2 つの実際値の乗算を考えてみましょう。

Va=VbVc.

これらの値は、スケーリングで説明されている一般的な [勾配 バイアス] エンコード スキームによって表現されます。

Vi=Fi2EiQi+Bi.

固定小数点システムでは、値を乗算して変数 Qa を求めます。

Qa=FbFcFa2Eb+EcEaQbQc+FbBcFa2EbEaQb+FcBbFa2EcEaQc+BbBcBaFa2Ea.

この式は、次のことを示します。

  • 一般に、QaQbQc の単純な乗算からは計算されません。

  • 通常は、定数 1 つと変数 2 つの乗算が 1 回、定数 1 つと変数 1 つの乗算が 2 回、加算が 3 回のほかに、ビット シフトがいくつかあります。

速度向上のための継承スケーリング

以下の選択によって算術演算の回数を削減できます。

  • Ba = BbBc を設定する。これで加算が 1 つなくなります。

  • Fa = FbFc を設定する。これで、方程式で最も実装が難しい部分である三重の乗算が簡略化されます。

  • Ea = Eb + Ec を設定する。これでビット シフトがいくつかなくなります。

最終的な式は次のようになります。

Qa=QbQc+BcFc2EcQb+BbFb2EbQc.

精度の最大化のための継承スケーリング

変数の範囲がわかっている場合は、最大精度のスケーリングを判断できます。精度の最大化では、固定小数点演算の範囲を

max(V˜a)

min(V˜a).

から判断できることを示しています。

乗算では次のように範囲を決定できます。

min(V˜a)=min(VLL,VLH,VHL,VHH),max(V˜a)=max(VLL,VLH,VHL,VHH),

ここで、

VLL=min(V˜b)min(V˜c),VLH=min(V˜b)max(V˜c),VHL=max(V˜b)min(V˜c),VHH=max(V˜b)max(V˜c).

2 進小数点のみのスケーリング

2 進小数点のみのスケーリングでは、Qa は以下の単純な式で求められます。

Qa=2Eb+EcEaQbQc.

ゲイン

定数と変数の乗算を考えてみましょう。

Va=KVb,

ここで、K は「ゲイン」と呼ばれる定数です。Va は定数と変数の乗算結果であるため、Qa を見つけることは、一般的な固定小数点乗算式の簡易バージョンになります。

Qa=(KFb2EbFa2Ea)Qb+(KBbBaFa2Ea).

なお、かっこ内の項はオフラインで計算できます。したがって、定数 1 つと変数 1 つの乗算が 1 回と加算が 1 回だけになります。

複雑な形式に変更せずに上記の方程式を実装するには、2 進小数点専用の形式を使用して定数をエンコードする必要があります。これらの定数のそれぞれで、範囲は値 1 つの小さいケースです。範囲は小さくても、精度を最大化するのための 2 進小数点式は有効です。シフトの回避を優先させる必要がなければ、最大精度の表現は最も有用な選択です。定数のエンコードは次のとおりで、

(KFb2EbFa2Ea)=2EXQX(KBbBaFa2Ea)=2EYQY

次の式になります。

Qa=2EXQXQB+2EYQY.

速度向上のための継承スケーリング

以下の選択によって算術演算の回数を削減できます。

  • Ba = KBb を設定する。これで定数の項が 1 つなくなります。

  • Fa = KFbEa = Eb を設定する。これで他の定数項が単一に設定されます。

    最終的な式は次のようになります。

    Qa=Qb.

ビット数が異なる場合、必要な操作は潜在的なオーバーフローの処理か符号拡張の実行だけです。

精度の最大化のための継承スケーリング

出力ビット数が入力ビット数より少ない場合を除いて、精度最大化のためのスケーリングは、速度向上のためのスケーリングと同様に処理できます。この場合は、失われたビットごとに勾配を 2 で割って、飽和を防ぐ必要があります。これによって飽和は回避できますが、丸めが発生します。

除算

値の除算は固定小数点組み込みシステムでは避けるべき演算ですが、局所的に発生することがあります。そこで、2 つの実際値の除算を考えてみましょう。

Va=Vb/Vc.

これらの値は、スケーリングで説明されている一般的な [勾配 バイアス] エンコード スキームによって表現されます。

Vi=Fi2EiQi+Bi.

固定小数点システムでは、値を除算して変数 Qa を求めます。

Qa=Fb2EbQb+BbFcFa2Ec+EaQc+BcFa2EaBaFa2Ea.

この式は、次のことを示します。

  • 一般に、QaQb 割る Qc の単純な除算からは算出されません。

  • 通常は、定数掛ける変数の乗算が 2 回、加算が 2 回、変数割る変数の除算が 1 回、定数割る変数の除算が 1 回のほかに、ビット シフトがいくつかあります。

速度向上のための継承スケーリング

以下の選択によって算術演算の回数を削減できます。

  • Ba = 0 を設定する。これで加算が 1 つなくなります。

  • Bc = 0 の場合は、小数部の勾配 Fa = Fb/Fc を設定する。これで定数掛ける変数の乗算が 1 つなくなります。

最終的な式は次のようになります。

Qa=QbQc2EbEcEa+(Bb/Fb)Qc2EcEa.

Bc ≠ 0 の場合は、明解な推奨ができません。

精度の最大化のための継承スケーリング

変数の範囲がわかっている場合は、最大精度のスケーリングを決定できます。精度の最大化は、固定小数点演算の範囲を以下から決定できることを示しています。

max(V˜a)

および

min(V˜a).

除算の場合は、次のように範囲を決定できます。

min(V˜a)=min(VLL,VLH,VHL,VHH),max(V˜a)=max(VLL,VLH,VHL,VHH),

非零の分母の場合

VLL=min(V˜b)/min(V˜c),VLH=min(V˜b)/max(V˜c),VHL=max(V˜b)/min(V˜c),VHH=max(V˜b)/max(V˜c).

2 進小数点のみのスケーリング

2 進小数点のみのスケーリングでは、Qa は以下の単純な式で求められます。

Qa=QbQc2EbEcEa.

メモ

Qa に関連する最後の 2 つの式では、ゼロ除算と、ゼロ割るゼロが可能です。このような場合は、ハードウェアの既定の動作が提供されますが、既定の応答が組み込みシステムに意味のある結果を提供することを確認しなければなりません。

概要

以上のように、一般的な [勾配 バイアス] エンコード スキーム内でスケーリングされた固定小数点変数の解析から、以下のように結論付けることができます。

  • 加算、減算、乗算、除算は、バイアスと勾配に特定の選択をしないと非常に複雑になることがあります。

  • 2 進小数点のみのスケーリングを使用すると計算が単純になりますが、通常は精度が低下します。

前の式では以下の点が示されていないことに注意してください。

  • 定数と変数は有限ビット数で表される。

  • 変数は符号付きか符号なしである。

  • 丸めとオーバーフローの処理方法。実際に固定小数点を実現する前に、これらを決定しなければなりません。

参考