インテル® FPGA SDK for OpenCL™ - サポートセンター

インテル® FPGA SDK for OpenCL™ のサポートページへようこそ!ここでは、カーネルのエミュレーション、コンパイル、プロファイリングの方法に関する情報を提供します。また、カーネルの最適化方法に関するガイドライン、ホスト・アプリケーションの実行中にシステムをデバッグする方法に関する情報も用意しています。このページは、開発プラットフォームに基づいて主に 2 つのカテゴリーに分けられています。FPGA のカーネル開発者向けと、CPU のホストコード開発者向けです。

ぜひご参照ください。

インテル® FPGA SDK for OpenCL™ は、ソフトウェア開発者が、インテル® CPU と FPGA を使用したヘテロジニアス・プラットフォームをターゲットにすることで、アプリケーションの高速化を実現できる環境です。インテル® FPGA SDK for OpenCL™ は、インテル® Quartus® Prime 開発ソフトウェアとは別にダウンロードすることもできます。

ホスト・ソフトウェア開発に必要なパッケージとドライバーをインストールするには、開発システム上の管理者権限が必要です。

ホストシステムは、「オペレーティング・システム・サポート」ページの一覧にある次の対応 Windows* / Linux* オペレーティング・システムのいずれかを実行している必要があります。

インテル® FPGA SDK for OpenCL™ 向けのホスト・アプリケーションは、次の開発環境のいずれかを使用して開発できます。

Windows* OS システム

  • インテル® FPGA SDK for OpenCL™
  • ボード・サポート・パッケージ (BSP)
  • Microsoft* Visual Studio Professional バージョン 2010 以降

Linux* OS システム

  • インテル® FPGA SDK for OpenCL™
  • BSP
  • RPM (RPM Package Manager、旧称: Red Hat Package Manager)
  • C コンパイラー (GCC に付属)
  • Perl コマンド (バージョン 5 以降)

インテル® FPGA SDK for OpenCL™ では、2 種類のモードでの開発体験をユーザーに提供します。コードビルダー向けでは、すべてのツールが統合された GUI 環境で、カーネルの設計、コンパイル、デバッグを行うことができます。また、従来のユーザーに向けたコマンドラインのオプションもあります。

  1. GUI / コードビルダー : 現時点では未提供

  2. コマンドライン・オプション : 

カーネル開発者向けの重要なユーザーコマンドを以下に示します。

aoc kernel.cl -o bin/kernel.aocx –board=

- ソースファイル kernel.cl をコンパイルして、 で指定したボード向けの FPGA プログラミング・ファイル (kernel.aocx)にします。-o を使用して出力ファイル名と出力場所を指定します。

 

aoc kernel.cl - o bin/kernel.aocx –board= -march=emulator

- エミュレーション用の aocx ファイルをビルドします。このファイルを使用してカーネルの機能をテストできます。

 

aoc -list-boards

- aocl version- 利用できるボードや出口のリストを出力します。

 

aoc -help

- インストール済みの現在の SDK バージョンを確認できます。- aoc コマンドのオプションと各オプションのヘルプ情報の一覧を出力します。

 

aocl version

- インストール済みの現在の SDK バージョンを確認できます。

 

aocl install

- PCIe* ドライバーをホスト・コンピューターにインストールできます。

 

aocl diagnose

-  ボードの内部セルフヘルス・チェックを実行できます。

 

aocl program

- カーネルのみのファイルを FPGA フラッシュメモリー内にプログラミングできます。

 

aocl flash

- JTAG 接続によりフラッシュメモリー全体を書き換えることができます。

 

aocl help

- aocl コマンドのオプションと各オプションのヘルプ情報の一覧を出力します。

Khronos 互換性

インテル® FPGA SDK for OpenCL™ は、公開されている Khronos の仕様に基づいており、Khronos Group のメンバーであるさまざまなベンダーによってサポートされています。インテル® FPGA SDK for OpenCL™ は、Khronos のコンフォーマンス・テストに合格しており、OpenCL* 1.0 規格に準拠し、Khronos Group による OpenCL* 1.0 ヘッダーおよび OpenCL* 2.0 ヘッダーの両方を提供します。

注意: 現在の SDK では、すべての OpenCL* 2.0 アプリケーション・プログラミング・インターフェイス (API) がサポートされているわけではありません。OpenCL* 2.0 ヘッダーを使用し、未サポートの API のコールを行うと、その API が完全にはサポートされていないことを示すエラーコードが返されます。

インテル® FPGA SDK for OpenCL™ のホストランタイムは OpenCL* プラットフォーム・レイヤーと API に準拠していますが、一部、明確化された点と例外があります。詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの「Support Statuses of OpenCL* Features (OpenCL* 機能のサポート状況)」の章を参照してください。

その他の関連リンク:

OpenCL* の拡張

チャネル (I/O またはカーネル)

インテル® FPGA SDK for OpenCL™ のチャネル拡張は、データをカーネルに渡し、高い効率と低いレイテンシーでカーネルを同期するメカニズムを実現します。チャネルの実装、使用、エミュレーションの方法に関する詳細については、次のリンクを参照してください。

注意: チャネルの機能を活用しつつ、ほかの SDK を使用してカーネルプログラムを実行する機能も必要な場合は、OpenCL* パイプを実装します。パイプの詳細については、パイプに関する次の章を参照してください。

パイプ

インテル® FPGA SDK for OpenCL™ では、OpenCL* 仕様バージョン 2.0 の OpenCL* パイプ機能を暫定的にサポートしています。この機能によって、データをカーネルに渡し、高い効率と低いレイテンシーでカーネルを同期するメカニズムを実現します。

インテル® FPGA SDK for OpenCL™ のパイプの実装は、OpenCL* 仕様バージョン 2.0 に完全には準拠していません。この SDK のパイプの実装は、さまざまな OpenCL* 2.0 準拠デバイス上でシームレスに機能するソリューションを提供することが目的です。インテル® FPGA 製品のパイプを有効にするには、デザインが特定の要件を満たす必要があります。

OpenCL* パイプの実装方法に関する詳細については、次のリンクを参照してください。

マルチステップのデザインフローでは、OpenCL* カーネルの機能は、x86-64 Windows* または Linux* ホスト上の 1 つまたは複数のエミュレーション・デバイス上で実行することによって評価できます。エミュレーション向けにデザインをコンパイルすると、数秒で .aocx ファイルが生成されます。これにより長時間のフルコンパイルが不要になり、デザインの際に繰り返し発生する作業をスムーズに行うことができます。

Linux* システムについては、エミュレーターでシンボリック・デバッグをサポートしています。シンボリック・デバッグによって、機能上のエラーの原因をカーネルコード内で見つけることができます。

次のリンクに、OpenCL* カーネルのデザインフローの概要があり、カーネルのエミュレーションを行うことができるさまざまな段階が説明されています。

インテル® FPGA SDK for OpenCL™ のマルチステップのデザインフロー (英語)

プログラミング・ガイドの「Emulating and Debugging Your OpenCL* Kernel (OpenCL* カーネルのエミュレーションとデバッグ)」の章には、ハードウェア上のカーネル動作とエミュレーションとの違いに関する詳細が記載されています。

その他の関連リンク:

インテル® FPGA SDK for OpenCL™ のオフライン・コンパイラー・テクノロジーでは、固定のハードウェア・アーキテクチャーへの最適化のためにカーネルを変更する必要はありません。代わりに、オフライン・コンパイラーによって、カーネル要件に合うように自動的にハードウェア・アーキテクチャーがカスタマイズされます。

一般に、まず単一のコンピューティング・ユニットを対象とするカーネルを最適化する必要があります。このコンピューティング・ユニットを最適化した後、FPGA の残りの部分までハードウェアをスケーリングすることで、パフォーマンスを向上します。カーネルのハードウェア実装面積は、ハードウェア・コンパイルにかかる時間との相関性があります。そのため、小さい実装面積 (すなわち、単一のコンピューティング・ユニット) で実行できる最適化が多いほど、所定の時間内に実行できるハードウェア・コンパイルは多くなります。

インテル® FPGA 向けの OpenCL* の最適化

デザインの実装を最適化し、パフォーマンスを最大化するには、理論上の最大パフォーマンスを理解し、どのような制限があるかを把握します。次の手順に従ってください。

  1. シンプルな既知の正常な機能の実装から開始します。
  2. エミュレーターを使用して、機能を検証します。
  3. 最適化レポートで報告されているパイプライン・ストールを解消または最小化します。
  4. メモリー帯域幅が最適化されるようにメモリーアクセスのプランニングを行います。
  5. プロファイラーを使用して、パフォーマンスの問題をデバッグします。

プロファイラーによってシステムのパフォーマンスに関する詳細な情報が得られるため、メモリーの使用アルゴリズムをどのような方向へ最適化する必要があるかが分かります。
FPGA の場合、割り当てられるリソースが増えるほど、多くの並列化を展開でき、より高いパフォーマンスを実現できます。

最適化に役立つレポートとリソース

システムによってさまざまなレポートが生成されます。これらのレポートから、コード、リソース使用、パフォーマンスの向上に向けてどのような領域に注力すべきかについて詳細な情報が得られます。

メモリー最適化

OpenCL* を使用したアプリケーションの効率的な実装には、メモリーシステムについての理解が極めて重要です。

グローバル・メモリー・インターコネクト

GPU とは異なり、FPGA では、アプリケーションに最適な独自のロード・ストア・ユニット (LSU) を構築できます。その結果、アプリケーションに最適な LSU タイプを選択する OpenCL* コードを記述できることで、デザインのパフォーマンスを大幅に向上できる可能性があります。

詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Global Memory Interconnect (グローバル・メモリー・インターコネクト)」の章を参照してください。

ローカルメモリー

ローカルメモリーは複雑なシステムです。標準的な GPU アーキテクチャーにはさまざまなレベルのキャッシュがありますが、FPGA では、FPGA 内の専用メモリーブロックにローカルメモリーが実装されます。詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Local Memory (ローカルメモリー)」の章を参照してください。

全体的なパフォーマンスの向上を目的としたメモリー使用の最適化には、さまざまな方法があります。主な手法の詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Allocating Aligned Memory (アライン済みのメモリーの割り当て)」の章を参照してください。

メモリーのアクセス効率を向上する手法の詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Strategies for Improving Memory Access Efficiency (メモリーアクセスの効率を向上する戦略)」の章を参照してください。

パイプライン

実装のパフォーマンスを最大限に活用するためには、パイプラインを理解することが極めて重要です。パイプラインを効率的に使用することで、パフォーマンス・スループットを向上できます。詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Pipelines (パイプライン)」の章を参照してください。

データ転送の詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Transferring Data Via Intel® FPGA SDK for OpenCL™ Channels or OpenCL* Pipes (インテル® FPGA SDK for OpenCL™ チャネルまたは OpenCL* パイプによるデータ転送)」の章を参照してください。

ストール、使用率、帯域幅

パフォーマンスのボトルネックは、カーネルのプロファイリングを通じて特定できます。カーネルのパフォーマンス不足につながるメモリーやチャネルの動作不具合をプロファイリング情報によって特定する方法については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Profiling Your Kernel to Identify Performance Bottlenecks (カーネルのプロファイリングによりパフォーマンスのボトルネックを特定する)」の章を参照してください。

ループの最適化

ループの最適化には次のような手法があります。

単一ワークアイテムのカーネルのさまざまなシナリオでループ伝搬依存性を排除する方法については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Removing Loop-Carried Dependency (ループ伝搬依存性の排除)」の章にヒントがあります。

浮動小数点演算の最適化に関する詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Optimizing Floating-Point Operations (浮動小数点演算の最適化)」の章を参照してください。

面積の最適化

さまざまなサイズの FPGA 上で実行可能な OpenCL* カーネルのデザインにおいては、面積使用率が重要な考慮事項となります。OpenCL* アプリケーションをデザインする際には、ハードウェアの面積使用率を最適化する特定のデザイン戦略に従うことをお勧めします。

一般に、カーネルのパフォーマンスを最適化するには、FPGA リソースの追加が必要になります。一方、面積の最適化では、ほとんどの場合、パフォーマンスが低下します。カーネルの最適化においては、FPGA ボード上で複数のバージョンのカーネルを実行し、サイズとパフォーマンスの最適なトレードオフを確認できるカーネル・プログラミング戦略を特定することをお勧めします。

FPGA 面積使用率を最適化する戦略については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Strategies for Optimizing FPGA Area Usage (FPGA 面積使用率の最適化戦略)」の章を参照してください。

リファレンス・デザイン例

次のようなデザイン例では、最適化の手法を紹介しています。

この例では、基本的な行列乗算の最適化を示しています。ループタイリングを使用して、行列乗算に固有の効果的なデータ再利用を行います。

この例で分かる内容:

- 単精度浮動小数点の最適化

- ローカル・メモリー・バッファリング

- コンパイルの最適化 (ループ展開、num_simd_work_items 属性)

- 浮動小数点の最適化

- 複数デバイスの実行

このデザイン例では、HPEC Challenge Benchmark Suite の時間領域の有限インパルス応答 (FIR) フィルターのベンチマークを実装します。詳細については、「Time-Domain Finite Impulse Response Filter Bank (時間領域 FIR フィルターバンク)」ページを参照してください。

このデザインは、浮動小数点 FIR フィルターについて、FPGA のパフォーマンスが GPU アーキテクチャーよりも極めて優れることを示す分かりやすい例となっています。

この例で分かる内容:

- 単精度浮動小数点の最適化

- 効率的な 1 次元スライディング・ウィンドウ・バッファーの実装

- 単一ワークアイテムのカーネル最適化方法

このデザイン例は、1080p の入力ビデオを 720p のビデオに変換して、1 秒当たり 110 フレームで出力するビデオ・ダウンスケーラーです。この例では、複数のカーネルを使用して、効率的にグローバルメモリーの読み書きを行っています。

この例で分かる内容:

- カーネルチャネル

- 複数の同時動作カーネル

- カーネル間チャネル

- スライディング・ウィンドウのデザインパターン

- メモリー・アクセス・パターンの最適化

このデザイン例は、Lucas Kanade オプティカル・フロー・アルゴリズムの OpenCL* 実装です。ウィンドウ・サイズが 52x52 の非反復型、非ピラミッド型の緻密なバージョンが、Cyclone® V SoC 開発キット上で 1 秒当たり 80 フレーム以上で動作します。

この例で分かる内容:

- 単一ワークアイテムのカーネル

- スライディング・ウィンドウのデザインパターン

- リソース使用率削減手法

- ビジュアル出力

トレーニング

OpenCL* の最適化に特化したオンライン・トレーニング (デザイン例付き) は次のサイトから利用できます。

参考資料

マルチステップのデザインフローでは、エミュレーションによるカーネル・パフォーマンスの推定値が許容範囲の場合、FPGA 上での実行中にデザインのパフォーマンスに関する情報を収集することができます。

インテル® FPGA SDK for OpenCL™ のオフライン・コンパイラーで、--profile オプションを指定して、.aocx ファイルの Verilog コードでパフォーマンス・カウンターを動作させることができます。実行中、インテル® FPGA SDK for OpenCL™ のプロファイラーによって、FPGA 上での OpenCL* カーネルの実行から収集されたパフォーマンス・データの測定およびレポートが行われます。その後、プロファイラー GUI でパフォーマンス・データを確認できます。

カーネルのプロファイリング方法に関する詳細は、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの「Profiling Your OpenCL* Kernel (OpenCL* カーネルのプロファイリング)」の章にあります。

プロファイリング・データの解析方法

プロファイリング情報によって、カーネルのパフォーマンス不足につながるメモリーやチャネルの動作不具合を特定することができます。インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの「Profile Your Kernel to Identify Performance Bottlenecks (カーネルのプロファイリングによりパフォーマンスのボトルネックを特定する)」の章に、ダイナミック・プロファイラー GUI と、ストール、帯域幅、キャッシュヒットなどのプロファイリング・データの解釈方法に関する詳細があります。OpenCL* デザイン例のシナリオについてのプロファイラー解析もあります。

インテル® FPGA SDK for OpenCL™ で提供されるコンパイラーとツールにより、インテル® FPGA 製品を対象とする OpenCL* アプリケーションをビルドし、実行することができます。

インテル® FPGA SDK for OpenCL™ のカーネル導入機能のみが必要な場合は、インテル® FPGA ランタイム環境 (RTE) for OpenCL™ をダウンロードし、インストールしてください。

この RTE は、インテル® FPGA SDK for OpenCL™ のサブセットです。SDK では OpenCL* カーネルプログラムの開発と導入が可能な環境が提供されますが、RTE では、ホストプログラムのビルドと実行、および対象のアクセラレーター・ボード上でのコンパイル済みの OpenCL* カーネルプログラムの実行が可能なツールとランタイム・コンポーネントが提供されます。

SDK と RTE を同一のホストシステムにインストールしないでください。SDK には、すでに RTE が含まれています。

ユーティリティーとホスト・ランタイム・ライブラリー

インテル® FPGA RTE for OpenCL™ は、ユーティリティー、ホスト・ランタイム・ライブラリー、ドライバー、RTE 固有のライブラリーとファイルを提供します。

  • RTE ユーティリティーには、高位のタスクを実行するために呼び出すことのできるコマンドが含まれています。RTE ユーティリティーは、インテル® FPGA SDK for OpenCL™ ユーティリティーのサブセットです。
  • ホストランタイムは、OpenCL* ホスト・アプリケーション向けの OpenCL* ホスト・プラットフォーム API とランタイム API を提供します。

ホストランタイムは、次のライブラリーで構成されます。

  • スタティック・リンク・ライブラリー: OpenCL* ホスト API、ハードウェア抽象化、ヘルパー・ライブラリーを提供
  • ダイナミック・リンク・ライブラリー (DLL): ハードウェア抽象化とヘルパー・ライブラリーを提供

ユーティリティーとホスト・ランタイム・ライブラリーの詳細については、インテル® FPGA RTE for OpenCL™ 入門ガイドの「Contents of the Intel® FPGA RTE for OpenCL™ (インテル® FPGA RTE for OpenCL™ のコンテンツ)」の章を参照してください。

ホストチャネルを使用することで、システムのレイテンシーを大幅に削減できます。ホストチャネルによって、ホストからのストリーミング・データは、メモリー・コントローラーをバイパスしつつ、PCIe* インターフェイス経由で FPGA カーネルに直接ストリーミングすることができます。FPGA カーネルは直ちにデータの処理を開始でき、データ転送の完了を待つ必要はありません。ホストチャネルは、OpenCL* ランタイム・アプリケーション・プログラミング・インターフェイス (API) でサポートされており、エミュレーションのサポートが含まれています。

ホストチャネルとエミュレーションのサポートに関する詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの「Emulating I/O Channels (I/O チャネルのエミュレーション)」の章を参照してください。

プロファイリングによって、プログラムの中で時間がかかっている部分や、呼び出している関数の種類を把握できます。この情報によって、想定より実行が遅く、プログラムの実行を高速化するために書き直しが必要な部分が分かります。また、どの関数の呼び出しが想定より多いか、または少ないかも分かります。

gprof

gprof は、Linux* オペレーティング・システムで利用できる、ソースコードのプロファイリング用のオープンソース・ツールです。これは時間ベースのサンプリングで機能します。一定間隔でプログラムカウンターを調査して、プログラムの実行がコード内のどのポイントに到達したかを判断します。

gprof を使用するには、コンパイラーのプロファイリング・フラグ -pg を使用してソースコードを再コンパイルします。

実行可能ファイルを実行して、プロファイリング情報を含むファイルを生成します。

「gmon.out」という名前の特有のファイルが生成されます。このファイルには、人が解読できるプロファイリング・データを gprof ツールで生成するために必要なすべての情報が含まれています。そこで、gprof ツールを次のように使用します。

$ gprof source code gmon.out > profile_data.txt

profile_data.txt というファイルには、gprof ツールを使用して生成された、人が解読できるプロファイリング・データの情報が含まれています。これには、フラット・プロファイルコールグラフの 2 つのパートがあります。

フラット・プロファイルには、各関数にかかった時間と、その関数の呼び出し回数が示されています。

コールグラフには、各関数について、その関数の呼び出し元の関数、その関数が呼び出しているほかの関数とその回数が示されています。各関数のサブルーチンにかかった時間の推定値もあります。

プロファイリングに gprof を使用する方法の詳細については、GNU のウェブサイト (英語) を参照してください。

インテル® VTune Amplifier

インテル® VTune™ Amplifier をプロファイリングに使用すると、Linux* 組込みプラットフォーム、Android*、または Windows* システム上のコードの実行をスピードアップし、最適化することが可能になります。次のタイプの解析が提供されます。

  • パフォーマンス解析: シリアルコードとパラレルコードのボトルネックの発見、アルゴリズム選択と GPU エンジン使用率の解析、利用できるハードウェア・リソースでアプリケーションにメリットが得られる部分と方法の把握
  • インテル® Energy Profiler 解析: 電力イベントの解析、電力を浪費するイベントの特定

インテル® VTune™ Amplifier の詳細については、Linux* OS 向けインテル® VTune™ Amplifier 2018 スタートガイド (英語) のウェブサイトを参照してください。

OpenCL* ホスト・パイプライン化マルチスレッドは、大量の入力データを処理する必要があり、また各データの処理を逐次処理で行う必要があるアルゴリズムに対して高いスループットを達成するためのフレームワークです。このフレームワークの最適な用途として、ヘテロジニアス・プラットフォームを使用して、アプリケーションの中で最も時間のかかる部分の高速化のために、高スループットのハードウェアまたはプラットフォームを使用することが挙げられます。それ以外のアルゴリズムの部分は、CPU などその他のプラットフォーム上で逐次処理で実行し、高速化されたタスクの入力データを準備するか、そのタスクの出力を使用して最終出力を用意する必要があります。このシナリオでは、アルゴリズムのパフォーマンスは部分的に高速化されますが、元のアルゴリズムの逐次的な性質上、システムの全体的なスループットはかなり遅くなります。

この AN 831: インテル® FPGA SDK for OpenCL™ ホスト・パイプライン化マルチスレッド・アプリケーション・ノート (英語) では、高スループット・デザイン向けの新しいパイプライン化フレームワークを提案しています。このフレームワークは、データの依存性によってすべての段階またはタスクの逐次処理が必要とされるアルゴリズムでの、大規模な入力データの処理に適しています。

FPGA はアクセラレーションが求められる場面でよく使用されます。OpenCL* には特有の方法が用意されており、CPU はこれを使用してタスクを FPGA にオフロードすることができます。次のファイルには、ホストコードで FPGA カーネルを起動するのに必要な共通の初期化ステップが含まれています。この初期化ステップを含むファイルはこちらからダウンロードしてください。

FPGA を初期化するには、init() 関数を main() 関数から呼び出します。このコードはまずカーネルが動作するデバイスを見つけ、ホストの実行ファイルと同じディレクトリーに置かれた aocx ファイルを使用してそのデバイスをプログラミングします。コード内の初期化ステップが終了した後、ユーザーがデザインのニーズに応じてカーネル引数を設定する必要があります。

カーネルの実行後にリソースを解放する cleanup() 関数も用意されています。

インテル® FPGA SDK for OpenCL™ エミュレーターを使用して、カーネルの機能をチェックできます。ユーザーは、OpenCL* カーネルの機能を、Linux* システム上のホスト・アプリケーションの一部としてデバッグすることもできます。これは、インテル® FPGA SDK for OpenCL™ エミュレーターが提供するデバッグ機能によって実行できます。

詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの次の章を参照してください。

環境変数の中には、設定することで、ホスト・アプリケーションの実行中により多くのデバッグ情報の入手を可能にするものがあります。これらはインテル® FPGA SDK for OpenCL™ に特有の環境変数で、カスタム・プラットフォーム・デザインの問題の診断に役立ちます。次の表は、このような環境変数すべての一覧です。詳細な説明も記載しています。

環境変数 説明
ACL_HAL_DEBUG この変数を 1 ~ 5 の値に設定すると、MMD レイヤーと直接インターフェイスするHardware Abstraction Layer (HAL) からのデバッグ出力を増やすことができます。
ACL_PCIE_DEBUG この変数を 1 ~ 10,000 の値に設定すると、MMD からのデバッグ出力を増やすことができます。この変数設定は、バージョン ID レジスターを正しく読み取れたことや、UniPHY IP コアがキャリブレーションされていることを確認する場合に役立ちます。
ACL_PCIE_JTAG_CABLE この変数を設定すると、ケーブル番号を指定するデフォルトの quartus_pgm 引数が上書きされます。デフォルトはケーブル 1 です。複数のインテル® FPGA ダウンロード・ケーブルが存在する場合、この変数を設定することで特定のケーブルを指定できます。
ACL_PCIE_JTAG_DEVICE_INDEX この変数を設定すると、FPGA デバイスのインデックスを指定するデフォルトの quartus_pgm 引数が上書きされます。デフォルトでは、この変数の値は 1 です。FPGA が JTAG チェーンの中の最初のデバイスではない場合、この値をカスタマイズできます。
ACL_PCIE_USE_JTAG_PROGRAMMING この変数を設定すると、パーシャル・リコンフィグレーションではなく、JTAG ケーブルを使用して MMD で強制的に FPGA の再プログラミングを行うことができます。
ACL_PCIE_DMA_USE_MSI この変数は、Windows* OS 上でダイレクト・メモリー・アクセス (DMA) 転送に MSI を使用する場合に設定します。
CL_CONTEXT_COMPILER_MODE_INTELFPGA この変数は設定を解除するか、または値を 3 に設定します。OpenCL* ホストランタイムは、必要に応じて FPGA の再プログラミングを行います。これは少なくとも初期化中に 1 回行われます。ホスト・アプリケーションの FPGA のプログラミングを防止するには、この変数の値を 3 に設定します。

インテル® FPGA SDK for OpenCL™ 診断ツールは、インテル® FPGA SDK for OpenCL™ の作業中に生じるさまざまなインストール / セットアップの問題、ハードウェアとソフトウェアの問題の診断および解決に役立ちます。このツールは、インストール・テスト、デバイステスト、リンクテストを実行します。ツールの詳細については、こちらのプレゼンテーションを参照してください。ツールを使用するには、こちらからダウンロードできます。

ホストプログラム内のループのため、その実行中に OpenCL* システムの動作が遅くなる場合があります。そのようなシナリオに関する詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの「Debugging Your OpenCL* System That is Gradually Slowing Down (次第に遅くなる OpenCL* システムのデバッグ)」の章を参照してください。

インテル® Code Builder for OpenCL™ は、インテル® FPGA SDK for OpenCL™ の一部として入手できるソフトウェア開発ツールです。このツールは、OpenCL* で高速化された Windows* および Linux* アプリケーションの作成、ビルド、デバッグ、解析の各機能を実現する Microsoft* Visual Studio および Eclipse プラグインから構成されています。詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの「Developing/Debugging OpenCL* Applications Using Intel® Code Builder for OpenCL™ (インテル® Code Builder for OpenCL™ を使用した OpenCL* アプリケーションの開発 / デバッグ)」の章を参照してください。

インテル® Arria® 10 デバイス

インテル® Stratix® 10 デバイス

設計 / 実行段階に関連する特有の問題については、ほかにもインテル® FPGA コミュニティーに次のようなリンクがあります。

さまざまなアプリケーションを OpenCL* で記述する際に利用できるさまざまなデザイン例が用意されています。ユーザーは、インテル® FPGA SDK for OpenCL™ をサポートする FPGA ボード搭載のホスト上で、そのようなデザインをコンパイルし、実行することができます。

OpenCL* デザイン例の詳細については、OpenCL* の「デベロッパー・ゾーン」ウェブサイトを参照してください。

タイトル

概要

OpenCL* スタートガイド パート1

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* 高速フーリエ変換 (FFT) の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

OpenCL* スタートガイド パート2

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

OpenCL* スタートガイド パート3

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

OpenCL* スタートガイド パート4

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

OpenCL* スタートガイド パート5

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

カスタムの Verilog モジュール / デザインを OpenCL* ライブラリーとしてパッケージする方法) (英語)

このビデオでは、この機能を使用して、カスタムの処理ブロック (RTL) を OpenCL* カーネルコードに含めることができる理由を説明します。makefile、config ファイルなどのデザイン例について説明し、コンパイルフローを説明します。また、このビデオではデザイン例のデモもご覧になれます。

OpenCL* の使用したインテル® SoC FPGA 開発 パート 1: ツールのダウンロードとセットアップ

このビデオでは、インテル® SoC FPGA を対象とする OpenCL* カーネルとホストコードの開発に必要なツールのダウンロード、インストール、設定の方法について紹介します。

OpenCL* を使用したインテル® SoC FPGA 開発 (Linux* ホスト) パート 2 : エミュレータによる Vector Add サンプルの実行

このビデオでは、OpenCL* に組み込まれているエミュレーターを対象として、サンプルの OpenCL* アプリケーションのダウンロード方法とコンパイル方法について紹介します。

OpenCL* を使用したインテル® SoC FPGA 開発 (Linux* ホスト) パート 3:SoC FPGA 用カーネル/ホスト・コードのコンパイル

このビデオでは、Cyclone® V SoC FPGA の FPGA とプロセッサーを対象として、OpenCL* カーネルおよびホストコードのコンパイル方法について紹介します。

OpenCL* を使用したインテル® SoC FPGA 開発 (Linux ホスト) パート 4:ランタイム環境のセットアップとサンプル・アプリケーションの実行

このビデオでは、OpenCL* の例を動作させるための Cyclone® V SoC ボードのセットアップ方法、ボード上でのホストコードとカーネルの実行方法について紹介します。

その他のテクノロジー