Vitis コア開発キットでは、アプリケーション プログラムがホスト アプリケーションとハードウェア アクセラレーション カーネルに分割され、その間が通信チャネルで接続されます。ホスト プログラムは、C/C++ および OpenCL のような API 抽象化を使用して記述され、ホスト プロセッサ (x86 サーバー、エンベデッド プラットフォーム用の Arm プロセッサなど) で実行されますが、ハードウェア アクセラレーション カーネルはザイリンクス デバイス内で実行されます。
ホスト プログラムとハードウェア アクセラレータの間のトランザクションを処理するには、XRT で制御される API 呼び出しが使用されます。制御およびデータの転送を含むホストとカーネルの間の通信には、 PCIe® バスまたはエンベデッド プラットフォームの AXI バスを使用します。制御情報はハードウェアの特定のメモリ位置間で転送されますが、ホスト プログラムとカーネル間のデータ転送にはグローバル メモリが使用されます。グローバル メモリにはホスト プロセッサとハードウェア アクセラレータの両方からアクセスできますが、ホスト メモリにはホスト アプリケーションからしかアクセスできません。
たとえば、典型的なアプリケーションでは、まずホストがカーネルで実行されるデータをホスト メモリからグローバル メモリに転送します。その後カーネルがデータを処理し、結果をグローバル メモリに格納します。カーネルが処理を終了すると、ホストが結果をホスト メモリに戻します。ホストとグローバル メモリ間のデータ転送によりレイテンシが発生し、アクセラレーション全体に悪影響を及ぼすことがあります。実際のシステムでアクセラレーションを達成するには、ハードウェア アクセラレーション カーネルで達成される利点がこのデータ転送のレイテンシを上回る必要があります。
ターゲット プラットフォームには FPGA アクセラレーション カーネル、グローバル メモリ、およびメモリ転送用のダイレクト メモリ アクセス (DMA) が含まれます。カーネルには 1 つまたは複数のグローバル メモリ インターフェイスを含めることができ、プログラム可能です。Vitis コア開発キットの実行モデルは、次の段階に分割できます。
- ホスト プログラムが、Alveo データセンター アクセラレータ カード上の PCIe インターフェイスまたはエンベデッド プラットフォームの AXI バスを介して、カーネルで必要なデータをグローバル メモリに書き込みます。
- ホスト プログラムが、入力パラメーターを使用してカーネルを設定します。
- ホスト プログラムが FPGA のカーネル関数の実行をトリガーします。
- カーネルが、必要に応じてグローバル メモリからのデータを読み出しながら、計算を実行します。
- カーネルがグローバル メモリにデータを書き込み、ホストにタスクが終了したことを通知します。
- ホスト プログラムがグローバル メモリからホスト メモリにデータを読み出し、必要に応じて処理を続けます。
FPGA には、アクセラレータ上に複数のカーネル インスタンス (別のカーネル タイプまたは同じカーネルの複数のインスタンス) を含めることができます。ホスト プログラムとアクセラレータ内のカーネル間の通信は、XRT で管理されます。XRT アーキテクチャの資料は、https://xilinx.github.io/XRT/ を参照してください。