インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

12.3.1.1. カーネルIDを生成し振り分けるハードウェアの省略

Max_global_work_dim(0)カーネル属性は、グローバル、ローカル、またはグループIDを生成しコンパイルされたカーネルに振り分けるロジックを省略するよう、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーに指示します。

意味的にmax_global_work_dim(0)カーネル属性は、カーネルのグローバル・ワーク・サイズがゼロであることを指定します。このカーネル属性を設定すると、カーネルがグローバル、ローカル、またはグループIDを使用しないことを意味します。カーネルコード内のこの属性の存在は、カーネルが単一のワークアイテム・カーネルであるということをオフライン・コンパイラーに対し保証しています。

次のカーネルをコンパイルすると、オフライン・コンパイラーは図 21 で表されているインターフェイス・ハードウェアを生成します。

channel int chan_in;
channel int chan_out;

__attribute__((max_global_work_dim(0)))
__kernel void plusK (int N, int k) {
    for (int i = 0; i < N; ++i) {
	    int data_in = read_channel_intel(chan_in);
	    write_channel_intel(chan_out, data_in + k);	
    }
}
図 21. max_global_work_dim(0) 属性をともなうカーネルに向けて インテル® FPGA SDK for OpenCL™オフライン・コンパイラーが生成するインターフェイス・ハードウェア

現在のカーネル実装に複数のワークアイテムがあり、グローバル、ローカル、またはグループIDを使用していない場合、次のようにカーネルコードを変更すると、max_global_work_dim(0)カーネル属性を使用することができます。

  1. ワークアイテムと同じ数だけ反復するforループのカーネル本体をラップする
  2. 変更したカーネルを1つのワークアイテムのみで起動する