SDAccel 設計手法

SDAccel™ 環境は、主に次の 2 つのユース ケースをサポートします。
  • ソフトウェア中心設計手法: ソフトウェア プログラマが記述したアプリケーションをプロファイリングして計算集約型関数またはボトルネックを特定し、それをアクセラレーションすることによりアプリケーションのパフォーマンスを向上します。
  • ハードウェア中心設計手法: アクセラレーション カーネル開発者が最適化されたカーネルを作成し、それをアプリケーション開発者がライブラリ エレメントとして呼び出します。ハードウェア中心設計手法では、カーネルを C、C++、OpenCL™ などの標準プログラミング言語で記述し、プログラマブル ロジックにインプリメンテーションするため RTL に合成するか、標準の RTL 設計手法を使用して RTL カーネルを作成および最適化します。

これらの 2 つのユース ケースを組み合わせて、ソフトウェアおよびハードウェア開発者がアクセラレータ カーネルを定義し、それらを使用するアプリケーションを開発することが可能です。この組み合わせ手法には、異なる開発者、場合によっては異なる企業が開発したアプリケーションのコンポーネントが関与します。アクセラレーションするアプリケーションに定義済みのカーネル ライブラリを利用するか、すべてのアクセラレーション関数をチームで開発できます。

ソフトウェア中心設計手法

ソフトウェア中心設計手法を使用してアクセラレーションするアプリケーションまたはアクセラレーション カーネルを開発するには、C または C++ を OpenCL API と共に使用します。コードは、コードのアーキテクチャに注意を払いながら、標準のソフトウェア プログラムとして記述します。ソフトウェア開発フローでは、通常次の手順を使用します。

表 1. ソフトウェア中心設計手法のフロー
手順 説明
アプリケーションのプロファイリング。 SDAccel プラットフォームの仕様とプログラムを調べます。アプリケーションの機能とパフォーマンスにおけるベースラインを求め、ハードウェアでアクセラレーションする関数を特定します。

実行時間が最も長い関数は、FPGA でアクセラレーションする良い候補です。

必要なカーネルのコード記述。 最適化なしで関数を OpenCL C または C/C++ カーネルに変換します。

これらのカーネルを呼び出すアプリケーション コードも、データの移動およびタスクのスケジューリングに OpenCL API を使用するよう変換する必要があります。

機能の検証 (必要に応じて繰り返し)。 ソフトウェア エミュレーションを実行して機能が正しいことを確認します。

ハードウェア エミュレーションを実行して、次を含むホストおよびカーネル プロファイリング データを生成します。

  • FPGA リソース使用量の見積もり (RTL でない)
  • 全体的なアプリケーションのパフォーマンス
  • ホスト呼び出しおよびカーネルの開始/停止時間を示す視覚的なタイムライン
パフォーマンスの最適化 (必要に応じて繰り返し)。 ハードウェア エミュレーションおよびシステム実行中に生成されたさまざまなコンパイル レポートおよびプロファイリング データを使用して最適化します。最適化の一般的な目標には、次のものがあります。
  • ホストとグローバル メモリの間のデータ移動、およびグローバル メモリとカーネルの間のデータ移動を最適化。
  • ソフトウェア要求間の並列実行を最大限にする。
  • 複数のカーネル間の並列実行を最大限にする。
  • タスクおよび命令レベルの並列実行を最大限にする。

ハードウェア中心設計手法

ハードウェア中心設計手法フローでは、カーネルの開発および最適化に焦点を置き、高度な FPGA 設計手法を活用します。ハードウェア中心設計手法フローでは、通常次の手順を使用します。

表 2. ハードウェア中心設計手法のフロー
手順
SDAccel プラットフォームの仕様とプログラミング モデルを調べます。
サイクル バジェットとパフォーマンス要件を見積もり、アクセラレータのアーキテクチャとインターフェイスを定義します。
アクセラレータを開発します。
機能とパフォーマンスを検証します。必要に応じて繰り返します。
QoR を最適化します。必要に応じて繰り返します。
カーネルを SDAccel にインポートします。
サンプル ホスト コードを開発し、実際のカーネルと同じインターフェイスを含むダミー カーネルを使用してテストします。
ハードウェア エミュレーションを使用するか実際のハードウェア上で実行して、カーネルがホスト コードで正しく機能するかを検証します。必要に応じて繰り返します。
アクティビティ タイムライン、プロファイル サマリ、およびソース コードのタイマーを使用してパフォーマンスを計測し、ホスト コードのパフォーマンスを最適化します。必要に応じて繰り返します。