ハードウェアおよびソフトウェアの構造 - 2023.2 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

システム デザイン モデルが優れていると、既存のアプリケーションの特定関数のハードウェア アクセラレーションが使用しやすくなり、最小限の変更で計算ハードウェアをインスタンシエートして、効率的に実行できます。Vitis HLS ベースのアクセラレーション フローでは、計算ハードウェアの効率がモデリング/コーディング スタイルとプラグマに依存します。RTL フローの場合、選択したアーキテクチャに依存します。アクセラレーション関数または CU の呼び出しとホストとの対話は、できるだけ自動化する必要があります。これには、ハードウェアを介したデータのパイプライン処理、複数の CU の使用および作成などが含まれます。

図 1. ハードウェアおよびソフトウェアの構造図
VSC は、統合 C++ モデルからのアクセラレータ デザインおよびアプリケーション ソフトウェア インターフェイスをコンパイルする方法を提供します。図の右側は、ハードウェア デザインが標準 Vitis プラットフォームのダイナミック領域に接続された AXI4 フレームワークを使用するシステムであることを示しています。このユーザー定義の構成には、複製可能な計算ユニット (CU) が含まれることがあり、その場合、各 CU はプロセッシング エレメント (PE) のデータ パイプライン ネットワークで、各 PE が次でデータを処理できるようになっています。
  • FPGA を搭載したアクセラレータ カードに対してローカルのデバイス メモリ (通常は DDR)
  • PCIe を介して FPGA に接続された smartSSD
  • 1 つまたは複数の AXI4-Stream を介して PE 入力に到達

CU は、プラットフォーム ポートに接続する必要があります。これは通常、DDR を介したホスト CPU との間のデータ転送の場合はメモリ マップド AXI4 (M_AXI)、低帯域幅のスカラー ワード転送の場合は AXI4-Lite です。CU は、独立したデータ セット上で動作すると、アプリケーション固有のマクロ並列化を達成でき、強力な高速化を実現できる可能性があります。VSC では、M_AXI ごとにデータ ムーバー (DM) を使用できます。DM は、AXI バーストなどの明確に定義されたプロトコルを自動化することで、DDR 転送を効率的にインプリメントする RTL IP です。CU は、デバイス メモリを介して別のユーザー定義のアクセラレータの CU にデータを転送することもあります。

VSC は、上図の左側に示すようなアプリケーション層インターフェイスを提供します。これは、C++ API インターフェイスで、主にハードウェア アクセラレータごとに 2 つのスレッド、または CU のクラスターが含まれます。send-thread は、アクセラレータでのデータの転送とジョブの起動を制御し、receive-thread は、アクセラレータからの結果を収集できるようにします。send-thread は、ソフトウェア インターフェイスとして機能する compute() という C 関数を使用して、アクセラレータ上で該当する call-job を起動します。ランタイム層は、このようなジョブの CU グループでのスケジューリング、compute() 引数の効率的なデータ転送の管理などの詳細を自動化します。これらの独立したスレッドにより、ソフトウェアはハードウェアの実行と非同期に対話できるので、アプリケーション固有の計算とデータ転送を効率的にモデリングできます。VSC ソフトウェア インターフェイスは、ユーザーによるハードウェアとの同期のためのいくつかの制御も提供します。

VSC は、C++ の統合システム構成パラダイムを提供し、ランタイム層を提供することで、CU とデバイス メモリ間のデータ転送をスムーズにし、ハードウェアとソフトウェアの相互関係をすぐにインプリメントできるようにします。

ハードウェアのコンパイルは非常に時間のかかるプロセスなので、ハードウェア コードの変更により、ハードウェアの再コンパイルがトリガーされないようにすることが重要です。これは、ユーザーが特定のコーディング スタイルを使用することで回避され、VSC で再利用可能なユーザー空間ライブラリを作成できます。これらのライブラリは、ユーザーが指定したハードウェア アクセラレータ システムよりも上のソフトウェア スタック (C++ API の) としても機能します。このようなライブラリは、サードパーティ ソフトウェア アプリケーションと統合するためのダイナミック ランタイム共有ライブラリとして使用することもできます。