インテル® FPGA SDK for OpenCL™ - サポートセンター
インテル® FPGA SDK for OpenCL™ サポートページでは、カーネルのエミュレーション、コンパイル、プロファイリングの方法に関する情報を提供しています。また、カーネルの最適化方法に関するガイドライン、ホスト・アプリケーションの実行中にシステムをデバッグする方法に関する情報も用意しています。このページは、開発プラットフォームに基づいて、FPGA のカーネル開発者向けと、CPU のホストコード開発者向けの、主に 2 つのカテゴリーに分けられています。
ソフトウェア要件
ホスト・ソフトウェア開発に必要なパッケージとドライバーをインストールするには、開発システム上の管理者権限が必要です。
ホストシステムは、オペレーティング・システム・サポートページに記載される、対応する 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)
- GCC に付属する C コンパイラー
- バージョン 5 以降の Perl コマンド
1.カーネル開発者
SDK ユーザー・インターフェイス
インテル® FPGA SDK for OpenCL™ では、2 種類のモードでの開発体験をユーザーに提供します。コードビルダー向けでは、すべてのツールが統合された GUI 環境で、カーネルの設計、コンパイル、デバッグを行うことができます。また、従来のユーザーに向けたコマンドラインのオプションもあります。
- GUI/ コードビルダー: 現在は利用できません
- コマンドラインのオプション:
以下に、カーネル開発者向けに便利なコマンドを紹介します。
aoc kernel.cl -o bin/kernel.aocx
- kernel.cl ソースファイルを <board_name> で指定されるボード向けに FPGA プログラミング・ファイル (kernel.aocx) にコンパイルします; -o は出力ファイル名と場所の指定に使用されます
aoc kernel.cl -o bin/kernel.aocx –board=<board_name> -march=emulator
- カーネルの機能をテストするのに使用できる、エミュレーション向けの aocx ファイルを構築します
aoc -list-boards
- 利用可能なボードのリストを印刷し、終了します
aoc -help
- これらの各オプション向けの aoc コマンドオプションとサポート情報の完全なリストを印刷します
aocl version
- インテル® FPGA SDK for OpenCL™ のインストールされたバージョンのバージョン情報を表示します
aocl install
- ボード向けのドライバーを現在のホストシステムにインストールします
aocl diagnose
- ボード向けのボードベンダーのテストプログラムを実行します
aocl program
- 新しい FPGA 画像をボードに構成します
aocl flash
- 指定されたスタートアップ構成で FPGA を初期化します
aocl help
- これらの各オプションの aocl コマンドオプションとサポート情報の完全なリストを印刷します
OpenCL™ の仕様
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™ プログラミング・ガイドの OpenCL™ 機能のサポート状況のセクションを参照してください。
その他の関連リンク:
- OpenCL™ の詳細については、Kronos Group OpenCL™ の概要ページを参照してください。
- 現在の準拠状況については、Kronos Group Adopter Program ページを参照してください。
- OpenCL™ 1.0 規格の詳細については、Khronos による The OpenCL™ Specification を参照してください。
OpenCL™ の拡張
チャネル (I/O またはカーネル)
インテル® FPGA SDK for OpenCL™ のチャネル拡張は、データをカーネルに渡し、高い効率と低いレイテンシーでカーネルを同期するメカニズムを実現します。チャネルの実装、使用、エミュレーションの方法に関する詳細については、次のリンクを参照してください。
- インテル® FPGA SDK for OpenCL™ チャネル拡張の実装
- カーネルのコピーによりチャネルを使用
- HTML レポート: カーネルのデザインコンセプト - チャネル
- インテル® FPGA SDK for OpenCL™ チャネルまたは 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™ パイプを実装する (英語)
- インテル® FPGA SDK for OpenCL™ チャネルまたは OpenCL™ パイプを介したデータの転送
- チャネルまたはパイプの実装における複数のコマンドキューの要件
エミュレーター
マルチステップのデザインフローでは、OpenCL™ カーネルの機能は、x86-64 Windows* または Linux* ホスト上の 1 つまたは複数のエミュレーション・デバイス上で実行することによって評価できます。エミュレーション向けにデザインをコンパイルすると、数秒で .aocx ファイルが生成されます。これにより長時間のフルコンパイルが不要になり、デザインの際に繰り返し発生する作業をスムーズに行うことができます。
Linux* システムについては、エミュレーターでシンボリック・デバッグをサポートしています。シンボリック・デバッグによって、機能上のエラーの原因をカーネルコード内で見つけることができます。
次のリンクに、OpenCL™ カーネルのデザインフローの概要があり、カーネルのエミュレーションを行うことができるさまざまな段階が説明されています。
インテル® FPGA SDK for OpenCL™ のマルチステップのデザインフロー (英語)
プログラミング・ガイドの OpenCL™ カーネルのエミュレーションとデバッグのセクションには、ハードウェア上のカーネル動作とエミュレーションとの違いに関する詳細が記載されています。
その他の関連リンク:
- OpenCL™ カーネルのエミュレーションとデバッグ
- I/O チャネルのエミュレーション
- エミュレーションによるホストランタイム機能の検証 (Windows)
- エミュレーションによるホストランタイム機能の検証 (Linux)
最適化
インテル® FPGA SDK for OpenCL™ のオフライン・コンパイラー・テクノロジーでは、固定のハードウェア・アーキテクチャーへの最適化のためにカーネルを変更する必要はありません。代わりに、オフライン・コンパイラーによって、カーネル要件に合うように自動的にハードウェア・アーキテクチャーがカスタマイズされます。
一般に、まず単一のコンピューティング・ユニットを対象とするカーネルを最適化する必要があります。このコンピューティング・ユニットを最適化した後、FPGA の残りの部分までハードウェアをスケーリングすることで、パフォーマンスを向上します。カーネルのハードウェア実装面積は、ハードウェア・コンパイルにかかる時間との相関性があります。そのため、小さい実装面積 (すなわち、単一のコンピューティング・ユニット) で実行できる最適化が多いほど、所定の時間内に実行できるハードウェア・コンパイルは多くなります。
インテル® FPGA 向けの OpenCL™ の最適化
デザインの実装を最適化し、パフォーマンスを最大化するには、理論上の最大パフォーマンスを理解し、どのような制限があるかを把握します。以下の手順に従ってください。
- シンプルな既知の正常な機能の実装から開始します。
- エミュレーターを使用して、機能を検証します。
- 最適化レポートで報告されているパイプライン・ストールを解消または最小化します。
- メモリー帯域幅が最適化されるようにメモリーアクセスのプランニングを行います。
- プロファイラーを使用して、パフォーマンスの問題をデバッグします。
プロファイラーによってシステムのパフォーマンスに関する詳細な情報が得られるため、メモリーの使用アルゴリズムをどのような方向へ最適化する必要があるかが分かります。
FPGA の場合、割り当てられるリソースが増えるほど、多くの並列化を展開でき、より高いパフォーマンスを実現できます。
最適化に役立つレポートとリソース
システムによってさまざまなレポートが生成されます。これらのレポートから、コード、リソース使用、パフォーマンスの向上に向けてどのような領域に注力すべきかについて詳細な情報が得られます。
メモリー最適化
OpenCL™ を使用したアプリケーションの効率的な実装には、メモリーシステムについての理解が極めて重要です。
グローバル・メモリー・インターコネクト
GPU とは異なり、FPGA では、アプリケーションに最適な独自のロード・ストア・ユニット (LSU) を構築できます。その結果、アプリケーションに最適な LSU タイプを選択する OpenCL™ コードを記述できることで、デザインのパフォーマンスを大幅に向上できる可能性があります。
詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドのグローバル・メモリー・インターコネクトのセクションを参照してください。
ローカルメモリー
ローカルメモリーは複雑なシステムです。標準的な GPU アーキテクチャーにはさまざまなレベルのキャッシュがありますが、FPGA では、FPGA 内の専用メモリーブロックにローカルメモリーが実装されます。詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドのローカルメモリーのセクションを参照してください。
全体的なパフォーマンスの向上を目的としたメモリー使用の最適化には、さまざまな方法があります。主な手法の詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの調整済みのメモリーの割り当てのセクションを参照してください。
メモリーのアクセス効率を向上する手法の詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドのメモリーアクセスの効率の向上方法のセクションを参照してください。
パイプライン
実装のパフォーマンスを最大限に活用するためには、パイプラインを理解することが極めて重要です。パイプラインを効率的に使用することで、パフォーマンス・スループットを向上できます。詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドのパイプラインのセクションを参照してください。
データ転送の詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドのインテル® FPGA SDK for OpenCL™ チャネルまたは OpenCL™ パイプによるデータ転送のセクションを参照してください。
ストール、使用率、帯域幅
パフォーマンスのボトルネックは、カーネルのプロファイリングを通じて特定できます。カーネルのパフォーマンス不足につながるメモリーやチャネルの動作不具合をプロファイリング情報によって特定する方法については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドのカーネルのプロファイリングによりパフォーマンスのボトルネックを特定のセクションを参照してください。
ループの最適化
ループの最適化には次のような手法があります。
単一ワークアイテムのカーネルのさまざまなシナリオで、ループ伝搬依存性を排除する方法については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドのループ伝搬依存性の排除のセクションを参照してください。
浮動小数点演算の最適化に関する詳細については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドの浮動小数点演算の最適化のセクションを参照してください。
面積の最適化
さまざまなサイズの FPGA 上で実行可能な OpenCL™ カーネルのデザインにおいては、面積使用率が重要な考慮事項となります。OpenCL™ アプリケーションをデザインする際には、ハードウェアの面積使用率を最適化する特定のデザイン方法に従うことをお勧めします。
一般に、カーネルのパフォーマンスを最適化するには、FPGA リソースの追加が必要になります。一方、面積の最適化では、ほとんどの場合、パフォーマンスが低下します。カーネルの最適化においては、FPGA ボード上で複数のバージョンのカーネルを実行し、サイズとパフォーマンスの最適なトレードオフを確認できるカーネルのプログラミング方法を特定することを推奨します。
FPGA 面積使用率を最適化する方法については、インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドのFPGA 面積使用率の最適化方法のセクションを参照してください。
リファレンス・デザイン例
次のようなデザイン例では、最適化の手法を紹介しています。
この例では、基本的な行列乗算の最適化を示しています。ループタイリングを使用して、行列乗算に固有の効果的なデータ再利用を行います。
この例で分かる内容:
- 単精度浮動小数点の最適化
- ローカル・メモリー・バッファリング
- コンパイルの最適化 (ループ展開、num_simd_work_items 属性)
- 浮動小数点の最適化
- 複数デバイスの実行
このデザイン例では、HPEC Challenge Benchmark Suite の時間領域の有限インパルス応答 (FIR) フィルターのベンチマークを実装します。
このデザインは、浮動小数点 FIR フィルターについて、FPGA のパフォーマンスが GPU アーキテクチャーよりも極めて優れていることを示す分かりやすい例となっています。
この例で分かる内容:
- 単精度浮動小数点の最適化
- 効率的な 1 次元スライディング・ウィンドウ・バッファーの実装
- 単一ワークアイテムのカーネル最適化方法
このデザイン例では、1080p のビデオを入力して 720p のビデオを 110 フレーム / 秒で出力するビデオ・ダウンスケーラーを実装します。この例では、複数のカーネルを使用してグローバルメモリーとの間で効率的に読み取りと書き込みを行います。
この例で分かる内容:
- カーネルチャネル
- 複数の同時動作カーネル
- カーネル間チャネル
- スライディング・ウィンドウのデザインパターン
- メモリー・アクセス・パターンの最適化
このデザイン例は、Lucas Kanade オプティカル・フロー・アルゴリズムの OpenCL™ 実装です。ウィンドウ・サイズが 52x52 の非反復型、非ピラミッド型の緻密なバージョンが、Cyclone® V SoC 開発キット上で 1 秒当たり 80 フレーム以上で動作します。
この例で分かる内容:
- 単一ワークアイテムのカーネル
- スライディング・ウィンドウのデザインパターン
- リソース使用率削減手法
- ビジュアル出力
トレーニング
OpenCL™ の最適化に特化した、デザイン例が付属したオンライン・トレーニングは次のサイトから利用できます。
- OpenCL* Optimization Techniques;Image Processing Algorithm Example (英語)
- OpenCL™ の最適化手法: Secure Hash Algorithm 例
参考資料
プロファイリング
マルチステップのデザインフローでは、エミュレーションによるカーネル・パフォーマンスの推定値が許容範囲の場合、FPGA 上での実行中にデザインのパフォーマンスに関する情報を収集することができます。
インテル® FPGA SDK for OpenCL™ のオフライン・コンパイラーに命令し、--profile オプションにより、.aocx ファイルの Verilog コードでパフォーマンス・カウンターを動作させることができます。実行中、インテル® FPGA SDK for OpenCL™ のプロファイラーによって、FPGA 上での OpenCL™ カーネルの実行から収集されたパフォーマンス・データの測定およびレポートが行われます。その後、プロファイラー GUI でパフォーマンス・データを確認できます。
カーネルのプロファイリング方法に関する詳細は、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの OpenCL™ カーネルのプロファイリングのセクションにあります。
プロファイリング・データの解析方法
プロファイリング情報によって、カーネルのパフォーマンス不足につながるメモリーやチャネルの動作不具合を特定することができます。インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドのカーネルのプロファイリングによりパフォーマンスのボトルネックを特定のセクションに、ダイナミック・プロファイラー GUI と、ストール、帯域幅、キャッシュヒットなどのプロファイリング・データの解釈方法に関する詳細があります。OpenCL™ デザイン例のシナリオについてのプロファイラー解析もあります。
2.ホストコード開発者
ランタイム・ホスト・ライブラリー
インテル® FPGA SDK for OpenCL™ で提供されるコンパイラーとツールにより、インテル® FPGA 製品を対象とする OpenCL™ アプリケーションを構築し、実行することができます。
インテル® FPGA SDK for OpenCL™ のカーネル導入機能のみが必要な場合は、OpenCL™ 向けインテル® FPGA ランタイム環境 (RTE) をダウンロードし、インストールしてください。
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™ 入門ガイドのインテル® FPGA RTE for OpenCL™ のコンテンツのセクションを参照してください。
データ・ストリーミング (ホストチャネル)
ホストチャネルを使用することで、システムのレイテンシーを大幅に削減できます。このホストチャネルにより、ホストからのストリーミング・データを、メモリー・コントローラーをバイパスしながら、PCIe* インターフェイスを経由して、FPGA カーネルへと直接ストリーミングすることが可能になります。FPGA カーネルは直ちにデータの処理を開始でき、データ転送の完了を待つ必要はありません。ホストチャネルは、OpenCL™ ランタイム・アプリケーション・プログラミング・インターフェイス (API) でサポートされ、エミュレーション・サポートが含まれています。
ホストチャネルとエミュレーションのサポートに関する詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの 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 初期化
FPGA はアクセラレーションが求められる場面でよく使用されます。CPU がタスクを FPGA にオフロードするためには、特定の OpenCL の使用方法があります。次のファイルには、ホストコードで FPGA カーネルを起動するのに必要な共通の初期化ステップが含まれています。この初期化ステップを含むファイルはこちらからダウンロードしてください。
FPGA を初期化するには、init() 関数を main() 関数から呼び出します。このコードはまずカーネルが動作するデバイスを見つけ、ホストの実行ファイルと同じディレクトリーに置かれた aocx ファイルを使用してそのデバイスをプログラミングします。コード内の初期化ステップが終了した後、ユーザーがデザインのニーズに応じてカーネル引数を設定する必要があります。
カーネルの実行後にリソースを解放する cleanup() 関数も用意されています。
3.デバッグ
エミュレーション
インテル® FPGA SDK for OpenCL™ エミュレーターを使用して、カーネルの機能をチェックできます。ユーザーは、OpenCL™ カーネルの機能を、Linux* システム上のホスト・アプリケーションの一部としてデバッグすることもできます。これは、インテル® FPGA SDK for OpenCL™ エミュレーターが提供するデバッグ機能によって実行できます。
詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの次の章を参照してください。
プロファイリング
プロファイリングの詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの次の章を参照してください。
ランタイム・デバッグ変数 |
|
---|---|
環境変数の中には、設定することで、ホスト・アプリケーションの実行中により多くのデバッグ情報を入手できるものがあります。これらはインテル® FPGA SDK for OpenCL™ に特有の環境変数で、カスタム・プラットフォーム・デザインでの問題の診断に役立ちます。次の表に、こうしたすべての環境変数の一覧とその詳細を示します。 | |
環境変数タイトル | 詳細 |
ACL_HAL_DEBUG |
この変数を 1 ~ 5 の値に設定すると、MMD レイヤーと直接インターフェイスするハードウェア抽象化レイヤー (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 を使用する場合に設定します。 |
インテル® FPGA SDK for OpenCL™ 向け診断ツール
インテル® FPGA SDK for OpenCL™ 診断ツールは、インテル® FPGA SDK for OpenCL™ の作業中に生じるさまざまなインストール / セットアップの問題、ハードウェアとソフトウェアの問題の診断および解決に役立ちます。このツールは、インストール・テスト、デバイステスト、リンクテストを実行します。ツールの詳細については、こちらのプレゼンテーションを参照してください。ツールを使用するには、こちらからダウンロードできます。
その他のデバッグ手法
ホストプログラム内のループのため、その実行中に OpenCL™システムの動作が遅くなる場合があります。そのようなシナリオに関する詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドの次第に遅くなる OpenCL™ システムのデバッグのセクションを参照してください。
インテル® Code Builder for OpenCL™ は、インテル® FPGA SDK for OpenCL™ の一部として入手できるソフトウェア開発ツールです。このツールは、OpenCL™ で高速化された Windows* および Linux* アプリケーションの作成、構築、デバッグ、分析の各機能を実現する Microsoft* Visual Studio および Eclipse プラグインから構成されています。詳細については、インテル® FPGA SDK for OpenCL™ プログラミング・ガイドのインテル® Code Builder for OpenCL™ を使用した OpenCL™ アプリケーションの開発 / デバッグのセクションを参照してください。
ナレッジ・データベース・ソリューション
インテル® Arria® 10 デバイス
インテル® Stratix® 10 デバイス
関連情報
デザインと実行の段階に関連する特定の問題向けのインテル® FPGA コミュニティー への追加リンクは次の通りです。
4.利用可能なトレーニング
トレーニング・コース
次の OpenCL™ トレーニング・コースをご覧ください。
OpenCL™ クイックビデオ |
|
---|---|
ビデオタイトル |
動画説明 |
Windows* を使用して OpenCL™ による Hello World などのプログラムを Cyclone® V SoC 上で実行する方法: パート 1 |
このビデオでは、Windows* コンピューターを使用して、OpenCL™ HelloWorld と OpenCL™ 高速フーリエ変換 (FFT) の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。 |
Windows を使用して OpenCL™ による Hello World などのプログラムを Cyclone® V SoC 上で実行する方法: パート 2 |
このビデオでは、Windows コンピューターを使用して、OpenCL™ HelloWorld と OpenCL™ FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。 |
Windows を使用して OpenCL™ による Hello World などのプログラムを Cyclone® V SoC 上で実行する方法: パート 3 |
このビデオでは、Windows コンピューターを使用して、OpenCL™ HelloWorld と OpenCL™ FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。 |
Windows を使用して OpenCL™ による Hello World などのプログラムを Cyclone® V SoC 上で実行する方法: パート 4 |
このビデオでは、Windows コンピューターを使用して、OpenCL™ HelloWorld と OpenCL™ FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。 |
Windows を使用して OpenCL™ による Hello World などのプログラムを Cyclone® V SoC 上で実行する方法: パート 5 |
このビデオでは、Windows コンピューターを使用して、OpenCL™ HelloWorld と OpenCL™ FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。 |
このビデオでは、この機能を使用して、カスタムの処理ブロック (RTL) を OpenCL™ カーネルコードに含めることができる理由を説明します。makefile、config ファイルなどのデザイン例について説明し、コンパイルフローを説明します。また、このビデオではデザイン例のデモもご覧になれます。 |
|
インテル® SoC FPGA 上の OpenCL™ (Linux* ホスト) – パート 1: ツールのダウンロードとセットアップ) |
このビデオでは、インテル® SoC FPGA を対象とする OpenCL™ カーネルとホストコードの開発に必要なツールのダウンロード、インストール、設定の方法について紹介します。 |
インテル® SoC FPGA 上の OpenCL™ (Linux* ホスト) – パート 2: エミュレーターによるベクトル加算のデザイン例の実行 |
このビデオでは、OpenCL™ に組み込まれているエミュレーターを対象として、サンプルの OpenCL™ アプリケーションのダウンロード方法とコンパイル方法について紹介します。 |
インテル® SoC FPGA 上の OpenCL™ (Linux* ホスト) – パート 3: SoC FPGA 向けのカーネルおよびホストコードのコンパイル |
このビデオでは、Cyclone® V SoC FPGA の FPGA とプロセッサーを対象として、OpenCL™ カーネルおよびホストコードのコンパイル方法について紹介します。 |
インテル® SoC FPGA 上の OpenCL™ (Linux* ホスト) – パート 4: ランタイム環境のセットアップ |
このビデオでは、OpenCL™ の例を動作させるための Cyclone® V SoC ボードのセットアップ方法、ボード上でのホストコードとカーネルの実行方法について紹介します。 |