インテルのみ表示可能 — GUID: ajy1519752300800
Ixiasoft
インテルのみ表示可能 — GUID: ajy1519752300800
Ixiasoft
12.5. カーネル内に登録される割り当ての組み込み関数
通常、望まれるパフォーマンスを達成するために__fpga_reg() 関数をカーネルコードに含める必要はありません。
__fpga_reg()組み込み関数のプロトタイプ
T __fpga_reg(T op)
このTは、標準のOpenCLデバイスのデータ型や、OpenCL型を含むユーザー定義の構造体など、任意のサイズの型にすることができます。
__fpga_reg() 関数は次のような目的で使用します。
- 大規模なストリックアレイを処理する要素間など、空間的に離れたデータパスの間のクリティカル・パスの切断
- 空間的に異なるカーネル実装によって発生する配置とルーティング・エフォートの負荷の軽減
__fpga_reg() 関数は、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーに対し、オペランドを戻り値に割り当てる信号パスに、ハードウェアをパイプライン化するレジスターを最低1つ挿入することを指示します。この組み込み関数は、OpenCLプログラミング言語で割り当てとして機能し、ここでオペランドは戻り値に割り当てられます。この割り当てには、標準のC代入を超える暗黙的な意味や機能的な意味はありません。機能的に__fpga_reg() 関数は、オフライン・コンパイラーの最適化によって常に削除されていると考えることができます。
ネスト化された__fpga_reg() 関数呼び出しをカーネルコードに導入し、オフライン・コンパイラーが割り当てパスに挿入する最小レジスター数を増やすことができます。各関数呼び出しは、少なくとも1つのレジスター・ステージの挿入を保証しているため、呼び出し数はレジスター数に下限を与えます。
次に例を示します。
int out=__fpga_reg(__fpga_reg(in));
このコード行はオフライン・コンパイラーに対し、割り当てパスに少なくとも2つのレジスターを挿入するよう指示します。オフライン・コンパイラーは、2つより多くのレジスターをパスに挿入する場合があります。