2D-FFT - 2024.1 日本語 - XD100

Vitis チュートリアル: AI エンジン

Document ID
XD100
Release Date
2024-06-19
Version
2024.1 日本語

バージョン: Vitis 2024.1

目次

概要

開始前の確認事項

デザイン インプリメンテーション

AI エンジンと HLS インプリメンテーションの比較

参考資料

既知の問題

概要

Versal™ アダプティブ SoC は、プログラマブル ロジック (PL)、プロセッシング システム (PS)、そして AI エンジンを兼ね備え、最新のメモリとインターフェイス技術を統合して、あらゆるアプリケーションで強力なヘテロジニアス アクセラレーションを実現します。ハードウェアとソフトウェアは、データ サイエンティスト、ソフトウェア開発者、ハードウェア開発者がプログラムおよび最適化できるよう設計されています。Versal アダプティブ SoC は、さまざまなツール、ソフトウェア、ライブラリ、IP、ミドルウェア、およびフレームワークでサポートされ、業界標準のあらゆるデザイン フローを利用できます。

このチュートリアルでは、システム レベルを AI エンジンでインプリメンテーションする方法と、DSP エンジンを使用した HLS でインプリメンテーションする方法の 2 パターンを実行します。それぞれのインプリメンテーション別に、完全な Versal アダプティブ SoC システム デザインのコンテキストで、ハードウェア エミュレーションとハードウェア フローを説明します。

それぞれのインプリメンテーション用に makefile が提供されています。cint16 および acfloat データ型、さまざまなポイント サイズ (32 x 64、64 x 128、128 x 256、256 x 512、1024 x 2048)、異なる数の fft_2d HLS カーネル/AI エンジン グラフ インスタンス (1、5、10)、最後に異なるターゲット (hw_emu と hw) のデザインの作成に使用できます。

設計資料では、各インプリメンテーションの設計手法を含むハードウェアおよびソフトウェア デザインの詳細を示し、機能の分割などについて詳しく説明します。コンパイル、実行、測定の各ステップとその結果についても示します。

目標

目標

このチュートリアルを終了すると、次ができるようになります。

  • アルゴリズムを特定して運用し、AI エンジン、または AMD Vitis™ HLS を使用した PL エンジンや DSP エンジンに運用し、システム レベルの 2D-FFT デザインを開発します。

  • Vitis のフローで次の手順に従って、完全なシステム設計を構築します。

    • AI エンジン適応型データフロー API (ADF) のグラフを作成します。

    • A72 ホスト アプリケーションおよび PL カーネルをコンパイルします。

    • Vitis コンパイラ (V++) を使用して、AI エンジンと HLS カーネルをプラットフォームとリンクします。

    • デザインをパッケージします。

    • SystemC/RTL サイクル精度/QEMU ベースの混合シミュレータで、ハードウェア エミュレーションおよびフローまで実行します。

  • (AXI4-Stream を使用して) AI エンジンまたは HLS/PL カーネルとの同様のインターフェイスをデータ ムーバー カーネルが維持できるように、一貫したハーネスを開発します。

  • AI エンジンをインプリメンテーションするグラフ制御 API と、HLS/PL カーネルを制御する HLS API について理解します。

  • AI エンジンで作成したデザインと、HLS を使用した PL エンジンや DSP エンジンで作成したデザインの設計手法の違いを理解します。

  • 異なる次元の FFT 配列のさまざまなインスタンスでの使用率、パフォーマンス/スループット、消費電力などのメトリクスを理解します。

デザインの概要

デザインの概要

このデザインの目的は、たとえば 1024 および 2048 ポイントの 1D-FFT カーネルを使用して 1024 x 2048 行列で実行される 2D-FFT アルゴリズムをインプリメントすることです。次の例に、アルゴリズムをインプリメントする擬似コードを示します。

x = rand(a,b);         % Create matrix of dimensions m x n

x_2fft = fft2(x);      % Reference generation, 2 dimensional FFT of matrix 'x'

FFT2D, using 1D – FFT.
x_row = fft(x);        % Row wise 1D-FFT
x_row = x_row.’;       % Transpose
x_col = fft(x_row);    % Row wise 1D-FFT
x_col = x_col.’;       % Transpose

x_2fft - x_col         % Calculate the error difference

各 1D-FFT の計算では、1 つの次元は定数のままになり、もう 1 つは計算されます。各 1D-FFT の計算後、transpose 関数が適用されます。transpose 関数は、次元の各エレメントに沿ったエントリを、もう 1 つの次元の対応エレメントに移動します。基準としてゴールデン データ セットが生成され、誤差が計算されます。

同様のアルゴリズムが、AI エンジン、または PL エンジンや DSP エンジンをターゲットとする HLS を使用して、2 つのインプリメンテーションで運用されます。デザインは Vitis コンパイラでコンパイルされ、スクリプトを使用して PetaLinux ベースのプラットフォームが作成され、PDI およびホスト アプリケーションが生成されます。ただし、transpose 関数の代わりに、PL ベースのデータ ジェネレーターおよびチェッカー (データ ムーバーと呼ばれる) が使用され、インパルス (cint16 または cfloat データ型に応じて値は 1 または 1.5) 入力を行方向 1D-FFT に提供し、その出力を同じものに対して想定される FFT 出力 (すべての 1 と残りの 0 を含む最初の行) と比較してチェックします。

PL 内で生成されるその転置パターンは、列方向 1D-FFT への入力としてストリームされます。そしてその出力は、想定される出力 (すべて 1) と比較してチェックされます。データ ムーバー カーネルにより、両ステージの合計エラー カウントがホスト アプリケーションに返され、テスト ケースの合格または不合格を宣言するために使用されます。

AI エンジンおよび HLS ベースのインプリメンテーション手法を比較できるようにするために、デザイン構築プロセスを変更して、さまざまな行列配列の次元 (行 x 列は 32 x 64、64 x 128、128 x 256、256 x 512、1024 x 2048) の異なる数のインスタンス (x1、x5、x10) で各インプリメンテーションがどのようにスケーリングされるかを解析することが可能です。

同様のハーネスが開発され、2 つのインプリメンテーション間で維持されます。これにより、PL ベースのデータ ムーバーのカーネルを使用して入力/出力ベクターを生成してチェックし、AI および HLS のカーネルとの間でデータを移動できるようになります。いずれの場合も、A72 で実行されているザイリンクス ランタイム (XRT) は、グラフ制御 API から計算およびデータ ムーバー カーネルのデータフローを制御します。これらのグラフ制御 API は、AI エンジン カーネルおよび HLS API を制御し、HLS/PL カーネルを制御します。

ディレクトリ構造

ディレクトリ構造

fft2d_AIEvsHLS
|__AIE......................contains AI Engine implementation
|    |Makefile....................with recipes for each step of the design compilation
|    |images......................contains images used for AI Engine Design documentation
|    |description.json............required for internal regression
|    |multi_params.json...........required for internal regression
|    |sample_env_setup.sh.........required to setup Vitis environment variables and Libraries
|    |build.......................created and contains subfolders from design build
|    |design......................contains source and include files
|    |       |aie_src....................contains all the aie source files
|    |       |pl_src.....................contains all the data mover source files
|    |       |host_app_src...............contains host application source files
|    |       |system_configs.............contains all system configuration files
|    |       |profiling_configs..........contains xrt.ini file
|    |       |hw_emu_files...............contains hw_emu launch script
|__HLS......................contains HLS implementation targeting PL and DSP Engines
|    |Makefile....................with recipes for each step of the design compilation
|    |images......................contains images used for DSP Design documentation
|    |description.json............required for internal regression
|    |multi_params.json...........required for internal regression
|    |sample_env_setup.sh.........required to setup Vitis environment variables and Libraries
|    |build.......................created and contains subfolders from design build
|    |design......................contains source and include files
|    |       |pl_src.....................contains all the fft_2d and data mover source files
|    |       |host_app_src...............contains host application source files
|    |       |system_configs.............contains all system configuration files
|    |       |profiling_configs..........contains xrt.ini file
|    |       |directives.................contains directives for various vitis compilation stages like hls.pre_tcl etc.
|    |       |hw_emu_files...............contains hw_emu launch script

開始前の確認事項

資料: AI エンジンのアーキテクチャの確認

資料: AI エンジンのアーキテクチャの確認

ツールのインストール

ツールのインストール

2D-FFT チュートリアル (AI エンジンおよび HLS のインプリメンテーション) をビルドして実行するには、次の手順を実行します。

プラットフォーム

プラットフォーム

チュートリアルを始める前に、ソフトウェアの設定と VCK190 ベースのプラットフォームのインストールについて、Vitis ソフトウェア プラットフォームのリリース ノートを確認してください。

このチュートリアルでは、VCK190 プロダクション ボードをターゲットとしています。このボードを既に購入されている場合は、ラウンジから必要なファイルをダウンロードし、正しいライセンスがインストールされていることを確認してください。ボードと必要なライセンスをお持ちでない場合は、AMD 販売代理店までご連絡ください。

環境の設定

環境の設定

Vitis ソフトウェア プラットフォームのエレメントをインストールしたら、シェル環境スクリプトを更新します。環境変数にシステム固有のパスを設定します。

XRT を設定するには、まだ実行していない場合は、次コマンドを実行します。

* source \<XRT-Location\>/setup.sh

各インプリメンテーションのデザイン ディレクトリで、env_setup.sh スクリプトをご自身のファイル パスに変更し、環境スクリプトを読み込みます。

source env_setup.sh

このスクリプトは、次に説明する環境変数とソース スクリプトを設定します。

  1. PLATFORM_REPO_PATHS 環境変数は、プラットフォームをダウンロードしたディレクトリに基づいています。

  2. AMD ツールの XILINX_TOOLS_LOCATION パスは、settings64.sh スクリプトを読み込むのに使用されます。

  3. 次の手順では、XLNX_VERSAL パスが xilinx-versal-common-v2024.1 ディレクトリに指定されます。

  4. プラットフォームのダウンロードに含まれる xilinx-versal-common-v2024.1/environment-setup-cortexa72-cortexa53-xilinx-linux スクリプトを実行して、プラットフォームを設定します。このスクリプトによって、SDKTARGETSYSROOTCXX 変数が設定されます。スクリプトがない場合は、xilinx-versal-common-v2024.1/sdk.sh スクリプトを実行する必要があります。

  5. DSPLIB_ROOT は、ダウンロードした Vitis DSP ライブラリのパスです。これは AI エンジンのインプリメンテーションにのみ必要です。

  6. スクリプトでは、オプションとして、Vitis コンパイラのパッケージ ステップでパッケージできる XRT - RPM を指す、XRT_ROOT 環境変数を設定できます。設定されていない場合、この環境変数は自動的にパッケージから除外されます。

  7. また、このスクリプトでは、PLATFORM 変数が tgt_plat 変数で設定されたターゲット プラットフォームの必須ファイル .xpfm を指定するようにも設定されます。

ツールのインストールの確認

ツールのインストールの確認

正しいツールがインストールされているかどうか確認するには、次のコマンドを実行します。

which vitis
which aiecompiler

VCK190 ベース プラットフォームが含まれているかどうか確認するには、次のコマンドを実行します。

platforminfo --list | grep -m 1 -A 9 vck190

上記のコマンドの出力は、次のようになるはずです。

 "baseName": "xilinx_vck190_base_202410_1",
            "version": "1.0",
            "type": "sdsoc",
            "dataCenter": "false",
            "embedded": "true",
            "externalHost": "false",
            "serverManaged": "false",
            "platformState": "pre_synth",
            "usesPR": "false",