任意精度固定小数点データ型 - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語

既存アプリケーションの中には、ほかのハードウェア アーキテクチャ用に記述されているために、浮動小数点データ型が使用されているものもあります。ただし、固定小数点型の方が、終了するのに多くのクロック サイクルを必要とする浮動小数点型よりも向いていることもあります。アプリケーションおよびアクセラレータの算術演算に浮動小数点を使用するか固定小数点を使用するかを選択する際は、消費電力、コスト、生産性、精度のトレードオフを注意深く評価する必要があります。

『浮動小数点から固定小数点への変換による消費電力およびコストの削減』 (WP491) で説明するように、機械学習のようなアプリケーションに浮動小数点ではなく固定小数点演算を使用すると、消費電力効率が上がり、必要な消費電力合計を削減できます。浮動小数点型の範囲がすべて必要な場合を除き、固定小数点型で同じ精度をインプリメントでき、より小型で高速なハードウェアにできることがよくあります。

固定小数点型では、データが整数ビットおよび小数ビットとして記述されます。固定小数点型には、ap_fixed ヘッダーが必要で、符号付きと符号なしの両方がサポートされます。

ヘッダー ファイル
ap_fixed.h
符号付き固定小数点
ap_fixed<W,I,Q,O,N>
符号なし固定小数点
ap_ufixed<W,I,Q,O,N>
  • W = 合計幅 <1024 ビット
  • I = 整数ビット幅。I の値は幅 (W) と等しいかそれ以下である必要があります。小数部を表すためのビット数は W から I を差し引いた値です。整数幅を指定するには、定数の整数式のみを使用します。
  • Q = 量子化モード。Q の指定には、あらかじめ定義されている列挙値のみを使用できます。使用できる値は、次のとおりです。
    • AP_RND: 正の無限大への丸め。
    • AP_RND_ZERO: 0 への丸め。
    • AP_RND_MIN_INF: 負の無限大への丸め。
    • AP_RND_INF: 無限大への丸め。
    • AP_RND_CONV: 収束丸め。
    • AP_TRN: 切り捨て。Q を指定しない場合、これがデフォルト値です。
    • AP_TRN_ZERO: 0 への切り捨て。
  • O = オーバーフロー モード。Q の指定には、あらかじめ定義されている列挙値のみを使用できます。使用できる値は、次のとおりです。
    • AP_SAT: 飽和。
    • AP_SAT_ZERO: 0 への飽和。
    • AP_SAT_SYM: 対称飽和。
    • AP_WRAP: 折り返し。O を指定しない場合、これがデフォルト値です。
    • AP_WRAP_SM: 符号絶対値の折り返し。
  • N = オーバーフロー WRAP モードでの飽和ビット数。このパラメーター値には定数の整数式のみを使用します。デフォルト値は 0 です。

次のコード例では、ap_fixed 型を使用して、符号付き 18 ビット変数 (6 ビットが 2 進小数点より上位の整数部で、12 ビットが 2 進小数点より下位の小数部) を定義しています。量子化モードは正の無限大 (AP_RND) へ丸めらるように設定されています。オーバーフロー モードと飽和ビットが指定されていないので、デフォルトの AP_WRAP と 0 が使用されます。

#include <ap_fixed.h>
...
  ap_fixed<18,6,AP_RND> my_type;
...

変数に異なるビット数 (W) や精度 (I) が含まれるような計算を実行する場合は、2 進小数点が自動的に揃えられます。固定小数点データ型使用に関する詳細は、 『Vitis HLS ユーザー ガイド』 (UG1399) の C++ の任意精度固定小数点型 を参照してください。