組み込み関数を使用したシングル カーネルのプログラミング - 2023.2 日本語

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

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 日本語
注意:
デザインには AI エンジン API を使用することを強くお勧めします。組み込み関数の使用は、デザインの厳しいパフォーマンス要件のため AI エンジン API では提供されない機能を必要とする場合にのみ考慮してください。たとえば、AI エンジン API では、現在のところ、fft_data_incrcyclic_add などの組み込み関数で提供される機能はサポートされていません。AI エンジン API では主な並べ替えのユース ケースがサポートされ、抽象化されていますが、並べ替えのすべての機能が提供されているわけではありません。組み込み関数を使用することにより、デザインに必要なパフォーマンスを達成しやすくなることがあります。

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

組み込み関数の詳細は、 『AI エンジン組み込み関数ユーザー ガイド』 (UG1078) を参照してください。AI エンジン コンパイラおよびシミュレータについては、この章の最初のいくつかのセクションで説明します。

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

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

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