一般的なハードウェア アクセラレーション フローは、アプリケーションまたはアルゴリズムの計算量の多い部分の特定と、それらをカスタム デザインのハードウェアとしてインプリメントすることで構成されます。これらのカスタム デザインのハードウェア要素は、通常、異種コンピューティングなどのドメインではアクセラレータと呼ばれ、AMD Vitis™ 内ではカーネルとも呼ばれます。通常、これらの関数やカーネルは、x86 または Arm® ベースのホスト マシン上の純粋なソフトウェアで実行すると、かなりの実行時間がかかります。Vitis アクセラレーション フローを使用すると、アクセラレーションに関数または関数のセットを選択した場合に、Vitis HLS または AMD Vivado™ Design Suite に基づいた RTL フローを使用してカスタム ハードウェアを設計または生成できます。ホスト アプリケーションは、XRT ネイティブ API、またはザイリンクス ランタイム (XRT) にリンクする OpenCL™ C または C++ を使用して記述できます。
アクセラレーションされたアプリケーションを設計するプロセスは、アクセラレーションのための高い演算能力を持つ関数の選択と、これらの関数を高速化するためのカスタム ハードウェアの設計から構成されます。さらに、アクセラレータとの間でデータ移動を調整する、ホスト マシン上で実行されるソフトウェアを記述する必要があります。アプリケーション デザイン全体で重要であり、面倒でもあるステップは、特に PCIe® またはネットワーク インターフェイスを介したデータ移動の最適化です。これらのデータ移動では、データがグローバル メモリまたはネットワーク ポートを介してホストとカーネル間を転送され、転送の性質に基づいて最適化できます。アクセラレーションされたハードウェアでは、データを並列処理する反復機能や接続されたパイプラインのいずれかとして、複数の関数を構成することもできます。これは、同一または異なるアクセラレーション関数インスタンスで構成される場合もあれば、ソフトウェアとハードウェアの関数が混在している場合もあります。
このため、完全なシステム アーキテクチャは、反復的な設計プロセスで開発されます。基本的に、一緒に開発されるデザイン側面は 3 つ (カーネル コード、サポートされるアプリケーションまたはホスト コード、ハードウェア/ソフト ウェア システム インターフェイスと構成) あります。全体的なデザイン パフォーマンスを向上するには、1 つのデザイン側面を変更した場合に必ず別の側面も変更する必要があります。Vitis システム コンパイル モード (VSC) では、デザインをすばやく簡単に確認できる単一のソースの統合 C++ モデルが提供されます。VSC は、次を実行するフレームワークになるように設計されています。
- アクセラレーションされたハードウェアを制御するホスト コードを簡素化することで、ホスト側の開発を容易にします。
- 計算ユニットの複製を試してみて、アプリケーション内のデータの並列処理が利用されるようにします。
- 複数のアクセラレーションされた関数およびソフトウェア関数を使用して、ソフトウェア側およびハードウェア側でタスク チェーン構成を有効にします。
- 低レベルのハードウェア API を抽象化して、ソフトウェア プログラミングに見えるようにします。
- 並行またはマルチスレッドのソフトウェア コードを簡単に記述して、エンドユーザーのアプリケーション コードとシームレスに統合できるようにします。