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

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

7.22.2. インクリメンタル・コンパイルのその他のコマンドオプション

インテル® FPGA SDK for OpenCL™ のインクリメンタル・コンパイル・フィーチャーに含まれているオプションの機能を有効にし、OpenCLデザインのコンパイルをカスタマイズすることができます。

複数のカーネルのパーティションへのグループ化 (-incremental-grouping=<filename>)

デフォルトにおいて、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーは、インクリメンタル・コンパイル時にデザイン内の各カーネルを個別のパーティションに配置します。 -incremental-grouping=<partition_filename> コマンドオプションをaocコマンドに含め、複数のカーネルを単一のパーティションにまとめることができます。通常、デザインに含まれるパーティションが少ないほどコンパイル速度は早くなります。

例: aoc -incremental-grouping=<partition_filename> <your_kernel_filename>.cl
注: 1つのカーネルのみを変更した場合でも、オフライン・コンパイラーはグループ内のすべてのカーネルを再コンパイルします。インテルでは、通常同時に変更するカーネルをグループ化することを推奨しています。

グループ化されたカーネルが多数のロードおよびストア動作を実行する場合、-incremental=aggressiveオプションもaocコマンドに含め、コンパイルスピードをさらに加速させることが可能です。

-Incremental-groupingオプションに渡すパーティション・ファイルは、プレーン・テキスト・ファイルです。ファイル内の各行は新しいパーティションを指定しており、カーネル名をセミコロン (;) で区切ったリストを含んでいます。例えば、パーティション・ファイルの以下の行は、3つのパーティションを指定し、それぞれに4つのカーネルを含んでいます。

reader0;reader1;reader2;reader3
accum0;accum1;accum2;accum3
writer0;writer1;writer2;writer3

アグレッシブ・モードによるデザインのコンパイル (-incremental=aggressive)

エリア使用量とスループットを引き換えに、インクリメンタル・コンパイルを加速するには、 -incremental=aggressiveコマンドオプションをaocコマンドに含めます。

このフィーチャーは、デザイン内のカーネルが多数のバッファーに対してロードおよびストア動作を行う場合や、-incremental-groupingコマンドオプションで複数のカーネルをグループ化した場合に特に有効です。

例: aoc -incremental=aggressive -incremental-grouping=<partition_filename> <your_kernel_filename>.cl

注意:
  • アグレッシブ・モードを有効にすると、Fmaxの低下が示すよりも大きいスループットの低下が生じる可能性があります。
  • 各OpenCLデザインのインクリメンタル・コンパイルを行っている間は、コンパイルモードを変更しないでください。デザインをアグレッシブ・モードでコンパイルする場合、そのデザインに対して続けて実行するインクリメンタル・コンパイルでは、すべてアグレッシブ・モードを有効にします。インクリメンタル・コンパイルのモードを切り替えるたびに、コンパイルが完了するまでの時間が長くなります。

カスタム入力ディレクトリーの指定 (-incremental-input-dir=<path_to_directory>)

オフライン・コンパイラーはインクリメンタル・コンパイル中に、デフォルトの <your_kernel_filename> プロジェクト・ディレクトリーを現在の作業ディレクトリーに作成し、中間コンパイルファイルを保存します。インクリメンタル・コンパイルをデフォルトのプロジェクト・ディレクトリー以外に配置するには、 -incremental-input-dir=<path_to_directory> コマンドオプションをaocコマンドに含めます。

次のいずれかまたは両方のシナリオでデザインをコンパイルする場合、-incremental-input-dirオプションを含める必要があります。

  • aocコマンドを前回のコンパイルとは違う作業ディレクトリーから実行する場合
  • -o <filename> コマンドオプションを前回のコンパイルに含めた場合

mykernel.clファイルが初期の作業ディレクトリーにあり、同じmykernel.clファイルの別のリビジョンがnew_revサブディレクトリーにある以下のシナリオを例にします。

aoc -incremental mykernel.cl
cd new_rev
aoc -incremental -fast-compile mykernel.cl -incremental-input-dir=../mykernel

このシナリオにおいてオフライン・コンパイラーは、mykernelプロジェクト・ディレクトリーにある初期コンパイル時のファイルを再利用し、それをもとに2回目のコンパイルを行います。オフライン・コンパイラーは、元のmykernelディレクトリー内のファイルを変更することなく、new_rev/mykernelプロジェクト・ディレクトリーを2回目のコンパイルに作成します。

-incremental-input-dirコマンドオプションは、複数のデベロッパーが同じインクリメンタル・セットアップ・コンパイルを共有する場合に有効です。各デベロッパーはその後のインクリメンタル・コンパイルを、他のデベロッパーのコンパイル結果を上書きすることなく自分の作業スペースで実行できます。

自動再試行の無効化 (-incremental-flow=no-retry)

インクリメンタル・コンパイルが失敗した場合、デフォルトでオフライン・コンパイラーはコンパイルの再試行を自動的に行います。その場合、パーティションは保存されずに2回目のコンパイルが実行されます。この2回目のコンパイルは、デザイン全体を再コンパイルするため完了までに時間がかかります。

オフライン・コンパイラーの自動再試行メカニズムを無効にするには、-incremental-flow=no-retryコマンドオプションをaocコマンドに含めます。このフィーチャーを有効にすると、最初の試みが失敗に終わった際に、オフライン・コンパイラーは2回目のインクリメンタル・コンパイルを実行しません。また、オフライン・コンパイラーは、.aocxファイルを生成しません。

このフィーチャーを有効にすることにより、次のような独自の失敗軽減ストラテジーを実行することが可能になります。

  • 複数のシードを並行してコンパイルすることにより、最低1つのコンパイルが再試行なしで成功する可能性を高める
  • インクリメンタル高速コンパイルに代わり、非インクリメンタル高速コンパイル ( aoc -fast-compile <your_kernel_filename>.cl) を実行する。