インテルのみ表示可能 — GUID: mwh1391807508636
Ixiasoft
3.3.1. 浮動小数点表現と固定小数点表現
OpenCL®標準は固定小数点表現をサポートしていません。整数データ型を使用して固定小数点表現を実装する必要があります。ハードウェア開発者は、通常、固定小数点データ表現を使用してハードウェアを節約し、計算を実行するために必要なデータ解決のみを保持します。OpenCL標準ではこれらのデータ解像度のみがサポートされているため、8,16,32、または64ビットのスカラデータ型を使用する必要があります。ただし、ハードウェアのコンパイルツールでハードウェア・リソースを節約するための最適化を実行できるように、ソースコードに適切なマスキング動作を組み込むことができます。
たとえば、アルゴリズムで17ビットのデータの固定小数点表現を使用する場合、値を格納するために32ビットのデータ型を使用する必要があります。その後、 Intel® FPGA SDK for OpenCL™オフライン・コンパイラー 2つの17ビット固定小数点値を一緒に追加するには、オフライン・コンパイラーが余分な上位15ビットの加算を処理するために余分なハードウェアを作成する必要があります。この追加のハードウェアが存在しないようにするには、スタティックビットマスクを使用して、ハードウェアのコンパイル中に不要なビットを無視するようにハードウェアのコンパイルツールに指示します。以下のコードはこのマスキング動作を実装しています。
__kernel fixed_point_add (__global const unsigned int * restrict a, __global const unsigned int * restrict b, __global unsigned int * restrict result) { size_t gid = get_global_id(0); unsigned int temp; temp = 0x3_FFFF & ((0x1_FFFF & a[gid]) + ((0x1_FFFF & b[gid])); result[gid] = temp & 0x3_FFFF; }
このコード例では、入力aとbの上位15ビットがマスクされて一緒に加算されます。 2つの17ビット値を加算した結果は18ビットの分解能を超えることができないため、オフライン・コンパイラーは追加のマスクを適用して結果の上位14ビットをマスクします。最終的なハードウェアの実装は、完全な32ビットの追加ではなく、17ビットの追加です。この例のロジックの節約は、FPGAで使用可能なハードウェア・リソースの数に比べて比較的少ないです。しかし、これらの小さな節約は、頻繁に適用されると、FPGA全体でより大きなハードウェア節約に蓄積されます。