C/C++ カーネルの開発手法 - 2019.2 Japanese

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

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

Vitis ソフトウェア プラットフォームでは、C/C++ または RTL (Verilog、VHDL、SystemVerilog) のいずれかで記述されたカーネルがサポートされます。この設計手法ガイドは C/C++ カーネル用です。RTL カーネルの詳細は、RTL カーネル を参照してください。

最適なアプリケーション パフォーマンスに必要な次のカーネル要件は、アーキテクチャの定義段階で既に特定されているはずです。

  • スループット目標
  • レイテンシ目標
  • データパス幅
  • エンジン数
  • インターフェイスの帯域幅

これらの要件により、カーネル開発および最適化プロセスが決まります。全体的なアプリケーション パフォーマンスは、各カーネルが指定したスループットを満たすことにより予測されるので、カーネルのスループット目標を達成することが主な目的となります。

このため、カーネル開発手法はスループット ドリブン方法に従って、アウトサイドインで開発していきます。この手法には、次の 2 つの段階が含まれます。

  1. カーネルのマクロ アーキテクチャを定義してインプリメント
  2. カーネルのマイクロ アーキテクチャをコード記述して最適化

カーネル開発プロセスを開始する前に、機能、アルゴリズム、アーキテクチャの違いと、これらがカーネル開発プロセスにどのように関係するかを理解しておくことが重要です。

  • 機能は、入力パラメーターと出力結果の数学的な関係です。
  • アルゴリズムは、特定の機能を実行するための一連の手順です。ある機能は、異なるアルゴリズムを使用して実行できます。たとえば、並べ替えは quick sort または bubble sort アルゴリズムを使用してインプリメントできます。
  • アーキテクチャは、このコンテキストでは、アルゴリズムの基になるハードウェア インプリメンテーションの特性を意味します。たとえば特定の並べ替えアルゴリズムは、並列実行するコンパレータ、RAM またはレジスタ ベースのストレージなどでインプリメントできます。

Vitis コンパイラでは、C/C++ で記述されたアルゴリズムから最適化されたハードウェア アーキテクチャが生成されますが、特定のアルゴリズムが別のアルゴリズムに変換されることはありません。

アルゴリズムはデータ アクセスの局所性および計算の並列処理に直接影響するので、コンパイラの能力やユーザー指定のプラグマよりも、選択するアルゴリズムが達成可能なパフォーマンスに大きく関係します。

次の設計手法では、アクセラレーションする機能に適したアルゴリズムが特定されていることを想定しています。

図 1. カーネル開発手法