シングル カーネルのプログラミング - 2023.2 日本語

AI エンジン カーネルおよびグラフ プログラミング ガイド (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 日本語

AI エンジン カーネルは、C/C++ 言語、AI エンジン API、VLIW スカラーおよびベクター プロセッサをターゲットとする特別な組み込み関数を使用して記述されたプログラムです。AI エンジン カーネルのコードは、AMD Vitis™ コア開発キットに含まれる aiecompiler を使用してコンパイルします。aiecompiler コンパイラは、カーネルをコンパイルし、AI エンジンで実行する ELF ファイルを生成します。

AI エンジンは、ベクター プロセッシング用の特別なデータ型および API 関数をサポートしています。これらの API 関数とベクター データ型を使用してスカラー アプリケーション コードを再構築することにより、高速で効率的なベクター化されたコードを作成できます。aiecompiler は、API 関数の演算への割り当て、ベクターまたはスカラー レジスタの割り当てとデータ移動、自動スケジューリング、および VLIW 命令に効率的にパックされたマイクロコードの生成を実行します。

次の章で、AI エンジン カーネルでサポートされるデータ型と使用可能なレジスタについて説明します。また、初期化、ロード、ストア、適切なデータ型を使用したベクター レジスタの操作を実行するベクター API 関数についても説明します。

AI エンジンで最高のパフォーマンスを達成するためのシングル カーネル プログラミングでの主な目的は、ベクター プロセッサの使用が論理的な最大値に近づくようにすることです。アルゴリズムのベクター化は重要ですが、ベクター レジスタ、メモリ アクセス、およびソフトウェアのパイプライン処理を管理することも必要です。ベクター プロセッサはクロック サイクルごとに 1 つの演算を実行できるので、現在の演算の実行中に次の演算のデータを準備するようにします。ループでのソフトウェア パイプライン処理を使用した最適化は、プラグマを使用して適用できます。たとえば、内側のループにシーケンシャルまたはループ運搬依存がある場合、外側のループを展開して複数の値を並列に計算できる場合があります。次のセクションでは、これらの概念も説明します。