AI エンジンは SIMD (Single-Instruction Multiple-Data) および VLIW (Very-Long Instruction Word) プロセッサを内蔵した、高度に最適化されたプロセッサで、固定小数点精度と浮動小数点精度の両方をサポートしています。次の図に示すように、AI エンジンはメモリ インターフェイス、スカラー ユニット、ベクトル ユニット、2 つのロード ユニット、1 つのストア ユニット、および命令フェッチ/デコード ユニットで構成されます。
図 1.
AI エンジン
AI エンジンの主な特長は次のとおりです。
- 32 ビット スカラー RISC プロセッサ
- 汎用ポインターおよびコンフィギュレーション レジスタ ファイル
- 非線形関数 (sqrt、Sin/Cos、InvSqrt など) をサポート
- スカラー ALU (32 x 32 ビット スカラー乗算器を含む)
- スカラー固定小数点とスカラー浮動小数点の間でデータ型変換をサポート
- 3 つのアドレス生成ユニット (AGU)
- 複数のアドレッシング モードをサポート: 固定、間接、ポスト インクリメント、または循環
- 高速フーリエ変換 (FFT) アドレス生成をサポート
- 2 つのロード ユニット専用の 2 つの AGU
- ストア ユニットに専用の 1 つの AGU
- ベクトル固定小数点/整数ユニット
- 複数のベクトル レーンで同時に演算を実行
- 複素数および実数オペランドに対して複数の精度をサポート (表 1 参照)。注記:
cfloat
はベクトル データ型ですが、AI エンジンのベクトル プロセッサでは直接サポートされていません。2 つの命令を発行する必要があります。表 1. ベクトル データパスでサポートされる精度 X オペランド Z オペランド 出力 MAC 演算回数 8 実数 8 実数 48 実数 128 16 実数 8 実数 48 実数 64 16 実数 16 実数 48 実数 32 16 実数 16 複素数 48 複素数 16 16 複素数 16 実数 48 複素数 16 16 複素数 16 複素数 48 複素数 8 16 実数 32 実数 48/80 実数 16 16 実数 32 複素数 48/80 複素数 8 16 複素数 32 実数 48/80 複素数 8 16 複素数 32 複素数 48/80 複素数 4 32 実数 16 実数 48/80 実数 16 32 実数 16 複素数 48/80 複素数 8 32 複素数 16 実数 48/80 複素数 8 32 複素数 16 複素数 48/80 複素数 4 32 実数 32 実数 80 実数 8 32 実数 32 複素数 80 複素数 4 32 複素数 32 実数 80 複素数 4 32 複素数 32 複素数 80 複素数 2 32 単精度浮動小数点 32 単精度浮動小数点 32 単精度浮動小数点 8 - 8 つの 16 ビット複素数乗算を実行するように構成可能
- 32 ビット粒度の完全な並べ替えユニット
- シフト、丸め、および飽和 (丸めと飽和は複数のモードを利用可能)
- 2 段階の後置加算 (768 ビットの中間結果)
- X オペランドは 1024 ビット幅で、Z オペランドは 256 ビット幅です。コンポーネントの使用に関しては、表 1 の最初の行を考慮に入れてください。乗算器オペランドは同じ 1024 ビットおよび 256 ビット入力レジスタから得られますが、一部の値は複数の乗算器にブロードキャストされます。128 個の 8 ビット シングル乗算器があり、結果は後置加算された後で累算されて、16 個または 8 個のアキュムレータ レーン (各 48 ビット) に入ります。
- 単精度浮動小数点 (SPFP) ベクトル ユニット
- 固定小数点数ベクトル ユニットと同じ並べ替えを使用
- 複数のベクトル レーンで同時に演算を実行
- 1 サイクルで 8 回の単精度 MAC (積和演算)
- バランスのとれたパイプライン
- ファンクション ユニットごとに種類の異なるパイプライン (最大 8 段)
- ロードおよびストア ユニットがデータ メモリの 5 サイクル レイテンシを管理
- 3 つのデータ メモリ ポート
- 2 つのロード ポートと 1 つのストア ポート
- 各ポートは 256 ビット/128 ビット ベクトル レジスタ モードまたは 32 ビット/16 ビット/8 ビット スカラー レジスタ モードで動作。8 ビットおよび 16 ビットのストアは Read-Modify-Write 命令として実行
- 3 つすべてのポートで同時に演算を実行
- いずれかのポートでバンクが競合するとデータパス全体がストール
- VLIW (Very-Long Instruction Word) ファンクション
- すべてのファンクション ユニットへ命令を同時発行
- 複数の命令フォーマットおよび可変長命令をサポート
- 1 つの VLIW ワードを使用して最大 7 つの演算を並列に発行可能
- ダイレクト ストリーム インターフェイス
- 2 つの入力ストリームと 2 つの出力ストリーム
- いずれのストリームも 32 ビットまたは 128 ビット幅に構成可能
- 1 つのカスケード ストリーム入力、1 つのカスケード ストリーム出力 (384 ビット)
- 次のモジュールへのインターフェイス
- ロック モジュール
- ストール モジュール
- デバッグ/トレース モジュール
- イベント インターフェイスは AI エンジンからの 16 ビット幅出力インターフェイス