インテルのみ表示可能 — GUID: nfc1491510569773
Ixiasoft
インテルのみ表示可能 — GUID: nfc1491510569773
Ixiasoft
5.6. 任意精度での整数の実装
インテル® FPGA SDK for OpenCL™ の任意精度での整数拡張を使用し、カスタムビット幅で整数を定義します。整数のカスタムビット幅は、最大64ビットまで定義できます。
#include "ihc_apint.h"
aoc <other command options> -I $INTELFPGAOCLSDKROOT/include/kernel_headers <my_kernel_file>
#define ap_int<d> intd_t #define ap_uint<d> uintd_t
int10_t x_signed; uint10_t x_unsigned;
任意精度の整数は、最大64ビット幅まで宣言することが可能です。
#pragma OPENCL EXTENSION cl_intel_arbitrary_precision_integers : enable
ap_int<d> intd_t my_signed_integer ap_uint<d> uintd_t my_unsigned_integer
結果のビット幅が引数のビット幅より大きい演算を行う場合は、引数の1つを結果のビット幅に明示的にキャストする必要があります。
int10_t a; int10_t b; int20_t res; res = a * b;
この例においてコンパイラーは、2つの10ビットの整数を乗算する乗数をインスタンス化し、結果を別の10ビットの整数に納めようと試みます。結果は符号拡張されるか、20ビットまでゼロ拡張されます。
res = ((int20_t)a) * b
x86-64のプラットフォームに向けてプログラムをコンパイルすると、任意の精度での整数のビット幅は32ビットまたは64ビットに切り上げられます。FPGAプラットフォームにカーネルをコンパイルすると、ビット幅は切り上げられず、任意の精度の整数は宣言されたビット幅のまま維持されます。
その結果、x86-64のプログラムで正しく動作するように見える演算をFPGAカーネルにコンパイルすると、オーバーフローし精度を失う可能性があります。x86-64プラットフォームにおいて、ビット幅を切り上げることで与えられる追加精度は、FPGAカーネルのコンパイル時に発生する可能性があるオーバーフローと、精度損失の問題をマスクします。