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

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

12.3.1.2. ホストとカーネル間の通信ハードウェアの省略

autorunカーネル属性は、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーに、ホストとカーネルの通信に使用されるロジックを省略するよう指示します。 autorun属性を使用するカーネルは、ホストが明示的に起動するカーネルよりも前に自動的に実行を開始します。さらにこのカーネルは、実行が終了するとすぐに自動的に再起動します。

autorunカーネル属性はオフライン・コンパイラーに対し、カーネルが独立して実行され、どのホストからもエンキューされないことを通知します。

autorun属性を活用するには、カーネルが次の基準をすべて満たしている必要があります。

  1. I/Oチャネルを使用しないこと
    注: カーネルからカーネルへのチャネルはサポートされています。
  2. 引数を持たないこと
  3. max_global_work_dim(0)属性またはreqd_work_group_size(XYZ) 属性のどちらかを持つこと
    注: reqd_work_group_size(XYZ) 属性のパラメーターは 232の除数である必要があります。

前述のように、autorun属性のあるカーネルは引数を持つことができず、ホストが明示的に起動することなく実行を開始します。そのためオフライン・コンパイラーは、ホストとカーネルの通信のためのロジックを生成する必要がありません。このロジックを省略するとロジック使用率が低下し、オフライン・コンパイラーがパフォーマンスの最適化をさらに適用することが可能になります。

autorun属性の一般的な使用例は、カーネル間の1つ以上のチャネルからデータを読み取り、データを処理し、その結果を1つ以上のチャネルに書き込むカーネルです。カーネルをコンパイルすると、オフライン・コンパイラーは、図 22 で表されているようにハードウェアを生成します。

channel int chan_in;
channel int chan_out;

__attribute__((max_global_work_dim(0)))
__attribute__((autorun))
__kernel void plusOne () {
    while(1) {
        int data_in = read_channel_intel(chan_in);
        write_channel_intel(chan_out, data_in + 1);	
    }
}
図 22. インターフェイス・ハードウェアのない単一ワークアイテム・カーネル