Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Section 5 - ベクトル設計の例

プログラミング例は、Ryzen™ AIのAI EngineとNPU配列の独自機能をさらに説明するための多数のサンプル設計です。

最もシンプルな例

Passthrough

passthrough例は、最もシンプルな「入門」例です。ベクトル化されたロードとストアを使用して、入力から出力へ4096バイトをコピーします。この設計例は、他の例でも簡単に再現できる典型的なプロジェクト構成を示しています。ここで重要なファイルは実質4つだけです。

  1. passthrough_kernel.py - 外部メモリに接続されたシムタイルと、コピーを実行する単一のAIEコアを含むAIE構造設計。セクション2で説明されているObject FIFOの簡単な使用例も示しています。
  2. passthrough.cc - ベクトル化されたコピー操作を実行するC++ファイル。
  3. test.cpp または test.py - 設計を実行し、CPUリファレンスと比較するためのC++またはPythonメインアプリケーション。
  4. Makefile - 様々なアーティファクトのビルドプロセスを文書化(および実装)するMakefile。

passthrough DMAs例は、コアを使わずにループバックを実行してコピーを行う別の方法を示しています。

基本設計

設計名データ型説明
Vector Scalar Addi32ベクトルの各要素に1を加算
Vector Scalar Muli32ベクトルにスケールファクタを乗算
Vector Vector Addi322つのベクトルを加算
Vector Vector Moduloi32ベクトル同士の剰余演算
Vector Vector Multiplyi322つのベクトルの要素ごとの乗算
Vector Reduce Addbfloat16ベクトルの全要素の合計値を返す
Vector Reduce Maxbfloat16ベクトルの全要素の最大値を返す
Vector Reduce Minbfloat16ベクトルの全要素の最小値を返す
Vector Expbfloat16入力のexを表すベクトルを返す
DMA Transposei32npu_dma_memcpy_ndを使用してShim DMAで行列を転置
Matrix Scalar Addi32行列とスカラーの乗算
Single core GEMMbfloat16単一コアの行列-行列乗算
Multi core GEMMbfloat16オペランドブロードキャストを使用した16個のAIEによる行列-行列乗算。シンプルな「その場で累積」戦略を使用
GEMVbfloat16ベクトルを返すベクトル-行列乗算

機械学習カーネル

設計名データ型説明
Eltwise Addbfloat162つのベクトルの要素ごとの加算
Eltwise Muli322つのベクトルの要素ごとの乗算
ReLUbfloat16ベクトルに対する正規化線形ユニット(ReLU)活性化関数
Softmaxbfloat16行列に対するSoftmax演算
Conv2Di8CNN用の単一コア2次元畳み込み
Conv2D+ReLUi8ベクトルレジスタレベルでReLUが融合されたConv2D

演習問題

  1. passthrough設計を変更して、より多く(または少なく)データをコピーできますか?

    答えを見る Makefileを確認してください。in1_sizeとout_sizeを変更します。
  2. Vector Exp例のtest.cppのテストベンチを見てください。データ型とテストベクトルのサイズに注目してください。何に気づきますか?

    答えを見る 65536個の値、つまり2^16個をテストしています。したがって、すべての可能なbfloat16値を近似を通してテストしています。
  3. ReLUにおける通信対計算比は何ですか?

    答えを見る トレースによると約6です。これが、Conv2DやGEMMとのカーネル融合が機械学習において有効な理由です。
  4. 難問 どの基本例がSoftmaxのコンポーネントになっていますか?

    答えを見る Vector Exp