AIE - 2024.1 日本語 - XD100

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

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

目次

デザインのビルド

ハードウェア デザインの詳細

ソフトウェア デザインの詳細

パフォーマンスの詳細

デザインのビルド

デザインのビルド

デザインのビルド

このセクションでは、AI エンジンのインプリメンテーションを使用して GeMM デザインを構築および実行します。AI エンジン デザインをコンパイルしたら大きいシステム デザインに統合します (PL カーネルおよび PS ホスト アプリケーションを含む)。一般的なフローについては、AI エンジン資料の Vitis ツール フローを使用したアプリケーションの統合を参照してください。

このセクションの最後に、デザイン フローでは新しいディレクトリ (build/) が生成されます。その下には、Mat A と Mat B の次元とビルドで選択されている x$(GEMM_INSTS) インスタンスの数によりますが、(gemm_$(MAT_DIMS)/ (たとえば gemm_32x32x32/) という名前のサブディレクトリがあります。各サブディレクトリには、hw_emu/hw/ サブフォルダーが含まれます。各サブフォルダーには、hw または hw_emu をそれぞれターゲットとする Work/ および libadf.a、AI エンジン コンパイラからの出力、ホスト アプリ実行ファイル、およびビルドが含まれます。hw_emu/ サブフォルダーには、ハードウェア エミュレーション用のビルドが含まれます。hw/ サブフォルダーには、VCK190 ボードで実行するハードウェア用のビルドが含まれます。

make ステップ

make ステップ

次の make ステップ (make kernelsmake graph など) は、AIE/ フォルダーで実行する必要があります。make ステップで指定できるオプションは、次のとおりです。

TARGET: これは hw または hw_emu に設定し、それぞれハードウェアまたはハードウェア エミュレーション フローでデザインを構築できます。デフォルト オプションは hw_emu です。

GEMM_INSTS: これはデフォルトで 1 に設定され、変更はできません。

GEMM_SIZE: 行列の次元です。たとえば、値が 32 であれば、行列 A (入力行列 1)、行列 B (入力行列 2)、および行列 C (出力行列) が 32 次元の正方行列であることを意味します。指定可能な値は、32641282565121024 です。

ITER_CNT: デザインの実行反復回数。デフォルトは 1 です。

EN_TRACE: トレース プロファイリングをイネーブルにするフラグ。0 にするとディスエーブル、1 にするとイネーブルになります。デフォルトは 0 (ディスエーブル) です。

Makefile では、次のディレクトリ参照が使用されます。

## Relative gemm directory
RELATIVE_PROJECT_DIR := ./

## Absolute gemm directory = <user path>/Tutorials/AI_Engine/gemm
PROJECT_REPO := $(shell readlink -f $(RELATIVE_PROJECT_DIR))

DESIGN_REPO  := $(PROJECT_REPO)/design
AIE_SRC_REPO := $(DESIGN_REPO)/aie_src
PL_SRC_REPO  := $(DESIGN_REPO)/pl_src
HOST_APP_SRC_REPO := $(DESIGN_REPO)/host_app_src

SYSTEM_CONFIGS_REPO    := $(DESIGN_REPO)/system_configs
PROFILING_CONFIGS_REPO := $(DESIGN_REPO)/profiling_configs
EXEC_SCRIPTS_REPO      := $(DESIGN_REPO)/exec_scripts
VIVADO_METRICS_SCRIPTS_REPO := $(DESIGN_REPO)/vivado_metrics_scripts
DIRECTIVES_REPO        := $(DESIGN_REPO)/directives


BASE_BLD_DIR     := $(PROJECT_REPO)/build
GEMM_BLD_DIR     := $(BASE_BLD_DIR)/gemm_$(MAT_DIMS)
INSTS_BLD_DIR    := $(GEMM_BLD_DIR)/x$(GEMM_INSTS)
BUILD_TARGET_DIR := $(INSTS_BLD_DIR)/$(TARGET)

REPORTS_REPO := $(PROJECT_REPO)/reports_dir
BLD_REPORTS_DIR := $(REPORTS_REPO)/gemm_$(MAT_DIMS)/x$(GEMM_INSTS)

XPE_REPO := $(PROJECT_REPO)/xpe_dir
BLD_XPE_DIR := $(XPE_REPO)/gemm_$(MAT_DIMS)/x$(GEMM_INSTS)/$(TARGET)
VCD_FILE_NAME := gemm_$(MAT_DIMS)_x$(GEMM_INSTS)
BLD_TGT_VCD_FILE := $(BUILD_TARGET_DIR)/$(VCD_FILE_NAME).vcd
XPE_FILE := $(BLD_XPE_DIR)/graph_$(VCD_FILE_NAME).xpe

EMBEDDED_PACKAGE_OUT := $(BUILD_TARGET_DIR)/package
EMBEDDED_EXEC_SCRIPT := run_script.sh

WORK_DIR := Work
AIE_SIM_IO_BASE_DIR := $(AIE_SRC_REPO)/aiesim_data
AIE_SIM_IO_DIR := $(AIE_SIM_IO_BASE_DIR)/gemm_$(MAT_DIMS)_ioFiles
1 つのコマンドを使用したデザイン全体のビルド

1 つのコマンドを使用したデザイン全体のビルド

AI エンジンおよび Vitis カーネル コンパイル フローを理解している場合は、1 つのコマンドで各 gemm_$(MAT_DIMS) に対するデザイン全体を構築できます。

make run (default target is hardware emulation, 1 instance, gemm_$(MAT_DIMS) matrix dimensions, iterations=1 and no trace-profiling )

または

make run TARGET=hw ITER_CNT=16 EN_TRACE=1 GEMM_SIZE=64 (hardware, 16 iterations, , matrix dimentions 64 for Mat A, B and C and enable trace profiling )

このコマンドは、指定した TARGET に基づいてハードウェア エミュレーション用またはハードウェア (VCK190 ボード) での実行用に、make kernelsmake graphmake xsamake applicationmake package、および make run_emu を実行します。設定は、下にリストする個々の make ステップにも適用されます。

gemm_$(MAT_DIMS) に対して生成されたファイルは、個々のディレクトリ $(BUILD_TARGET_DIR)/ の下に配置されます。デザインを構築する各 make ステップについては、以降のセクションで説明します。また、使用するオプションと、入力および出力ファイルのディレクトリについても説明します。

make kernels: PL カーネルのコンパイル

make kernels: PL カーネルのコンパイル

このステップでは、Vitis コンパイラはターゲット プラットフォーム (xilinx_vck190_base_202410_1) の PL 領域の Vitis コンパイラ カーネル (RTL または HLS C) と、AI エンジン カーネルおよびグラフを取得して、対応する XO ファイルにコンパイルします。次のコマンドは、カーネルをコンパイルします (デフォルト TARGET=hw_emuGEMM_INSTS=1GEMM_SIZE=32ITER_CNT=1、および EN_TRACE=0)。

make kernels

コマンドと使用するオプションは次のとおりです (dma_hls の場合)。

$(BUILD_TARGET_DIR)/$(DATAMOVER_KERNEL_XO).xo: 
	mkdir -p $(BUILD_TARGET_DIR); \
	cd $(BUILD_TARGET_DIR); \
	v++ --target $(TARGET) $(DATAMOVER_KERNEL_VPP_FLAGS) \
		$(VPP_FLAGS) -c -k $(DATAMOVER_KERNEL_TOP) \
		$(DATAMOVER_KERNEL_SRC) -o $@

すべての Vitis コンパイラ オプションの詳細は、こちらのページを参照してください。次の表に、使用するオプションをまとめます。

オプション 説明
--target | -t [hw|hw_emu] ビルド ターゲットを指定します。
--platform | -f サポートされるアクセラレーション プラットフォームの名前を $PLATFORM_REPO_PATHS 環境変数で指定されているように指定するか、XPFM プラットフォーム ファイルへの完全パスを指定します。
--save-temps | -s Vitis コンパイラ コマンドでコンパイルおよびリンク プロセス中に作成された中間ファイル/ディレクトリを保存します。--temp_dir オプションを使用すると、中間ファイルを保存するディレクトリを指定できます。
--temp_dir ビルド プロセス中に作成された一時ファイルを保存するディレクトリを指定します。--save-temps オプションを指定しておかない場合、一時的な結果は Vitis コンパイラで書き出された後削除されます。
--verbose 詳細/デバッグ情報を表示します。
--compile | -c コンパイルしてカーネル ソース ファイルから XO ファイルを生成するのに必要です。
--kernel \<arg>|-k \<arg> 入力ファイルから指定したカーネルのみをコンパイルします。Vitis コンパイラ コマンドごとに使用できる -k オプションは 1 つだけです。
--output | -o V++ コマンドで生成された出力ファイルの名前を指定します。DMA HLS カーネル出力は XO にする必要があります。
入力 説明
$(PL_SRC_REPO)/dma_hls.cpp データ ムーバー PL カーネルを定義します。
出力 説明
$(BUILD_TARGET_DIR)/dma_hls.hw_emu.xo データ ムーバー カーネル オブジェクト ファイル。
make graph: Vitis コンパイラ フローの AI エンジン ADF グラフの作成

make graph: Vitis コンパイラ フローのための AI エンジン ADF グラフを作成します。

ADF グラフは、エクステンシブル Vitis プラットフォームに接続できます (グラフ I/O は、Vitis コンパイラ接続指示子を使用して、プラットフォーム ポートまたは Vitis カーネルのポートのいずれかに接続可能)。

  • デザインの AI エンジン ADF C++ グラフには、AI エンジン カーネルおよび PL カーネルが含まれます。

  • カーネル間のインターコネクトはすべて C++ グラフで定義されます。

  • 外部 I/O へのすべての相互接続は、C++ ADF グラフ オブジェクトをインスタンス化する C++ シミュレーション テストベンチ (graph.cpp) で完全に指定されます。

Makefile フロー タイプ (デフォルト TARGET=hw_emuGEMM_INSTS=1GEMM_SIZE=32ITER_CNT=1EN_TRACE=0) を使用してグラフをコンパイルします。

make graph

次の AI エンジン コンパイラ コマンドは、次のオプションを指定して、AI エンジン デザイン グラフをコンパイルします。

...
AIE_FLAGS := -include=$(AIE_SRC_REPO)
AIE_FLAGS += -include=$(DSPLIB_ROOT)/L1/include/aie
AIE_FLAGS += -include=$(DSPLIB_ROOT)/L1/src/aie
AIE_FLAGS += -include=$(DSPLIB_ROOT)/L1/tests/aie/inc
AIE_FLAGS += -include=$(DSPLIB_ROOT)/L1/tests/aie/src
AIE_FLAGS += -include=$(DSPLIB_ROOT)/L2/include/aie
AIE_FLAGS += -include=$(DSPLIB_ROOT)/L2/tests/aie/common/inc
AIE_FLAGS += --verbose
AIE_FLAGS += --Xpreproc="-DITER_CNT=$(ITER_CNT)"
AIE_FLAGS += --Xpreproc="-DGRAPH_ITER_CNT=$(GRAPH_ITER_CNT)"
AIE_FLAGS += --Xpreproc="-DGEMM_SIZE=$(GEMM_SIZE)"
AIE_FLAGS += --Xpreproc="-DGEMM_INSTS=$(GEMM_INSTS)"
AIE_FLAGS += --platform=$(PLATFORM)
#AIE_FLAGS += --target=$(TARGET)

AIE_FLAGS += --log-level=5
#AIE_FLAGS += --test-iterations=2
AIE_FLAGS += --pl-freq=$(PL_FREQ)
#AIE_FLAGS += --dataflow

#AIE_FLAGS += --constraints=$(AIE_SRC_REPO)/constraints.aiecst

AIE_FLAGS += --Xmapper=BufferOptLevel9
AIE_FLAGS += --Xrouter=DMAFIFOsInFreeBankOnly


AIE_FLAGS += --workdir=$(WORK_DIR)

AIE_SIM_FLAGS := --pkg-dir $(WORK_DIR)/
AIE_SIM_FLAGS += -i=$(AIE_SIM_IO_DIR)

...
graph: $(LIBADF_A)

$(LIBADF_A):  $(AIE_SRC_REPO)/graph.*
	mkdir -p $(BUILD_TARGET_DIR); \
	cd $(BUILD_TARGET_DIR); \
	aiecompiler $(AIE_FLAGS) $(GRAPH_SRC_CPP) 2>&1 | tee -a aiecompiler.log

AI エンジン プログラム環境の資料は、こちらのページを参照してください。

次の表に、使用するオプションをまとめます。

オプション 説明
--include=\<string> コンパイル時のインクルード ディレクトリを指定します (ゼロ以上)。
--verbose|-v AI エンジン コンパイラの出力を詳細出力に設定し、コンパイルのさまざまな段階でコンパイラ メッセージを出力します。これらのデバッグおよびトレース ログは、コンパイル プロセスに関して有用なメッセージを提供します。
--Xpreproc="-D\<Pre-processor Macro String>" コンパイル時のマクロを指定します。
--Xchess="\<Chess Make Options>" コンパイル時の Chess make オプションを指定します ("main:bridge.llibs=softfloat m" にすると浮動小数点演算がイネーブルになる)。
--heapsize=\<int> ヒープ サイズ (バイト数)。
--log-level=\<int> 詳細ログのレベル (デフォルトは 1)。
--workdir=\<string> デフォルトでは、コンパイラのすべての出力が現在のディレクトリの Work サブディレクトリに生成されます。異なる出力ディレクトリを指定する場合に、このオプションを使用します。

次は、AI エンジン コンパイラ (aiecompiler) コマンドを実行した結果の出力オブジェクトの説明です。

入力ソース 説明
$(AIE_SRC_REPO)/graph.cpp GeMM グラフ オブジェクトを定義します。
出力オブジェクト 説明
$(BUILD_TARGET_DIR)/libadf.a コンパイル済みの AI エンジンのデザイン グラフ。
$(BUILD_TARGET_DIR)/Work/ AI エンジンのコンパイラの出力すべてを保存するディレクトリです。
make xsa: Vitis ツールを使用した AI エンジンおよび HLS カーネルとプラットフォームとのリンク

make application: ホスト アプリケーションのコンパイル

Cortex A72 用の次の一般的なクロス コンパイル フローに従って、ホスト アプリケーションをコンパイルできます。アプリケーションを構築するため、次のコマンドを実行します (デフォルトは TARGET=hw_emuGEMM_INSTS=1GEMM_SIZE=32ITER_CNT=1EN_TRACE=0)。

make application

または

application: graph $(BUILD_TARGET_DIR)/$(APP_ELF)

REG_GCC_FLAGS := $(GCC_FLAGS)
REG_GCC_FLAGS += -DITER_CNT=$(ITER_CNT)
REG_GCC_FLAGS += -DGRAPH_ITER_CNT=$(GRAPH_ITER_CNT)

$(BUILD_TARGET_DIR)/$(APP_ELF): $(HOST_APP_SRC)/* $(LIBADF_A)
	@rm -rf $(BUILD_TARGET_DIR)/app_control.o $(BUILD_TARGET_DIR)/gemm_aie_app.o $(BUILD_TARGET_DIR)/$(APP_ELF)
	$(CXX) $(REG_GCC_FLAGS) $(GCC_INC_FLAGS) $(AIE_CONTROL_CPP) -o $(BUILD_TARGET_DIR)/app_control.o
	$(CXX) $(REG_GCC_FLAGS) $(GCC_INC_FLAGS) $(APP_SRC_CPP) -o $(BUILD_TARGET_DIR)/gemm_aie_app.o $(GCC_INC_LIB) $(GCC_LIB)
	$(CXX) $(BUILD_TARGET_DIR)/app_control.o $(BUILD_TARGET_DIR)/gemm_aie_app.o $(GCC_INC_LIB) $(GCC_LIB) -o $(BUILD_TARGET_DIR)/$(APP_ELF)

XRT の資料は、こちらのページを参照してください。ホスト アプリケーション プログラミングの詳細は、こちらのページを参照してください。

オプション 説明
-O | Optimize. コンパイルを最適化するには時間がかかり、大型ファンクションではメモリも多く必要です。-O を使用すると、コンパイラは、かなりのコンパイル時間がかかる可能性のある最適化を実行せずに、コード サイズおよび実行時間の削減を試みます。
-D__linux__
-DXAIE_DEBUG 特定のコア ステータス、イベント ステータス、またはスタック トレースを出力できるデバッグ インターフェイス機能をイネーブルにします。
-D\<Pre-processor Macro String>=\<value> クロス コンパイラにプリプロセッサ マクロ定義を渡します。
-I \<dir> ヘッダー ファイルを検索するディレクトリのリストにディレクトリ dir を追加します。
-o \<file> ファイル <file> に出力を配置します。これは、生成される出力が実行ファイル、オブジェクト ファイル、アセンブラー ファイル、または前処理された C コードであるかどうかにかかわらず適用されます。
--sysroot=\<dir> ヘッダーおよびライブラリの論理ルート ディレクトリとして dir を使用します。たとえば、コンパイラが /usr/include でヘッダー、/usr/lib でライブラリを通常は検索する場合、代わりに dir/usr/include および dir/usr/lib で検索します。これは、env_setup.sh スクリプトにより自動的に設定されます。
-l\<library> リンク中に library というライブラリを検索します。GeMM チュートリアルには、adf_api_xrtxrt_coreutil ライブラリが必要です。
-L \<dir> -l を検索するディレクトリのリストにディレクトリ <dir> を追加します。

次は、AI エンジン コンパイラ コマンドでコンパイルされる入力ソースの説明です。

入力ソース 説明
$(HOST_APP_SRC_REPO)/gemm_aie_app.cpp A72 プロセッサで実行する gemm_aie_xrt.elf のソース アプリケーション ファイル。
$(BUILD_TARGET_DIR)/Work/ps/c_rts/aie_control_xrt.cpp GeMM グラフ用のグラフ API をインプリメントして生成された AI エンジン制御コード。

次は、上記の入力およびオプションを使用して AI エンジン コンパイラ コマンドを実行した結果の出力オブジェクトの説明です。

出力オブジェクト 説明
$(BUILD_TARGET_DIR)/gemm_aie_xrt.elf A72 プロセッサで実行する実行ファイル。
make package: デザインのパッケージ

make package: デザインのパッケージ

AI エンジン出力および新しいプラットフォームが作成されたら、プログラマブル デバイス イメージ (PDI) と、SD カードで使用されるパッケージを生成できます。PDI には、デバイスの実行ファイル、ビットストリーム、およびコンフィギュレーションがすべて含まれます。パッケージされた SD カード ディレクトリには、Linux のブートに必要なすべてのもの、生成されたアプリケーション、および XCLBIN が含まれます。

このステップを実行するコマンドは次のようになります (デフォルトは、TARGET=hw_emuGEMM_INSTS=1GEMM_SIZE=32ITER_CNT=1EN_TRACE=0)。

make package

または

...
PKG_FLAGS := -t $(TARGET)
PKG_FLAGS += --save-temps
PKG_FLAGS += --temp_dir $(BUILD_TARGET_DIR)/_x
PKG_FLAGS += -f $(PLATFORM)
PKG_FLAGS += --package.rootfs $(COMMON_IMAGE_VERSAL)/rootfs.ext4
PKG_FLAGS += --package.kernel_image $(COMMON_IMAGE_VERSAL)/Image
PKG_FLAGS += --package.boot_mode=sd
PKG_FLAGS += --package.out_dir $(EMBEDDED_PACKAGE_OUT)
PKG_FLAGS += --package.image_format=ext4
PKG_FLAGS += --package.sd_file $(BUILD_TARGET_DIR)/$(APP_ELF) $(BUILD_TARGET_DIR)/$(XSA) $(LIBADF_A)
PKG_FLAGS += --package.sd_file $(BUILD_TARGET_DIR)/$(APP_ELF_INF_RUN) 
PKG_FLAGS += --package.sd_file $(EXEC_SCRIPTS_REPO)/$(EMBEDDED_EXEC_SCRIPT)

## If Profiling for Performance Measurement is enabled..
ifeq ($(EN_TRACE),1)
   ifeq ($(TARGET),hw)
      PKG_FLAGS += --package.sd_file $(PROFILING_CONFIGS_REPO)/xrt.ini
   
   endif
endif

## If XRT_ROOT is set...
ifdef XRT_ROOT
   PKG_FLAGS += --package.sd_dir $(XRT_ROOT)

endif

PKG_FLAGS += --package.defer_aie_run
...
package: application application_inf_run xsa $(EMBEDDED_PACKAGE_OUT)

$(EMBEDDED_PACKAGE_OUT): $(PROFILING_CONFIGS_REPO)/* $(EXEC_SCRIPTS_REPO)/* $(BUILD_TARGET_DIR)/$(APP_ELF) $(BUILD_TARGET_DIR)/$(XSA) $(BUILD_TARGET_DIR)/$(APP_ELF_INF_RUN)
	rm -rf $(EMBEDDED_PACKAGE_OUT)
	cd $(BUILD_TARGET_DIR);	\
	v++ -p $(PKG_FLAGS)

システムのパッケージの詳細は、こちらのページを参照してください。

オプション 説明
--target | -t [hw|hw_emu] ビルド ターゲットを指定します。
--package | -p Vitis コンパイルおよびリンク ビルド プロセスの終わりで最終的な出力をパッケージします。
--package.rootfs \<arg> \<arg>: 処理された Linux ルート ファイル システム ファイルへの絶対パスまたは相対パスを指定します。プラットフォーム RootFS ファイルは、xilinx.com からダウンロードできます。詳細は、Vitis ソフトウェア プラットフォームのインストールを参照してください。
--package.kernel_image \<arg> \<arg>: Linux カーネル イメージ ファイルへの絶対パスまたは相対パスを指定します。プラットフォームで使用可能な既存のイメージを上書きします。プラットフォーム イメージ ファイルは、xilinx.com からダウンロードできます。詳細は、Vitis ソフトウェア プラットフォームのインストールを参照してください。
--package.boot_mode \<arg> \<arg>: .エミュレーション中またはハードウェアでアプリケーションを実行するのに使用されるブート モードを指定します。
--package.image_format \<arg>: \<ext4|fat32> で出力イメージ ファイル形式を指定します。ext4 は Linux ファイル システム、fat32 は Windows ファイル システムです。
--package.sd_file \<arg>: sd_card ディレクトリ/イメージにパッケージする ELF またはその他のデータ ファイルを指定します。このオプションを繰り返し使用すると、複数のファイルを sd_card ディレクトリに追加できます。
--package.defer_aie_run AI エンジン アプリケーションに ELF ファイルを読み込みますが、graph.run で命令されるまで実行を開始しないようにします。これは PS ベースの AI エンジン フローで必要です。
入力ソース 説明
$(PLATFORM_REPO_PATHS)/sw/versal/xrt PS ホスト アプリケーションを実行するには、このフォルダーに XRT ヘッダーが必要です。
$(PLATFORM_REPO_PATHS)/sw/versal/xilinx-versal/rootfs.ext4 PetaLinux のルート ファイル システム ファイル。
$(PLATFORM_REPO_PATHS)/sw/versal/xilinx-versal/Image プロセッサがブートされる構築済みの PetaLinux イメージ。
$(BUILD_TARGET_DIR)/gemm_aie_xrt.elf make application ステップで作成された PS ホスト アプリケーション実行ファイル。
$(BUILD_TARGET_DIR)/vck190_aie_gemm.hw_emu.xsa make xsa ステップで作成された XCLBIN ファイル。
$(BUILD_TARGET_DIR)/libadf.a make graph ステップで作成された、コンパイルされた AI エンジン デザイン グラフ。

Vitis コンパイラ パッケージ ステップの出力は、ハードウェア エミュレーションを実行するためのコンテンツを含むパッケージ ディレクトリです。

出力オブジェクト 説明
$(BUILD_TARGET_DIR)/package ブート ファイル、ハードウェア エミュレーション起動スクリプト、PLM および PMC ブート ファイル、PMC および QEMU コマンド引数仕様ファイル、Vivado シミュレーション フォルダーを含むハードウェア エミュレーション パッケージ。
make run_emu: ハードウェア エミュレーションの実行

make run_emu: ハードウェア エミュレーションの実行

パッケージ後、ハードウェア エミュレーションの実行に必要なものがすべて設定されます。エミュレーションを実行するには、次のコマンドを実行します (デフォルト TARGET=hw_emu)。

make run_emu 

または

###########################################################################
Hardware Emulation Goto:
$(BUILD_TARGET_DIR)/package

and do:
./launch_hw_emu.sh or ./launch_hw_emu.sh -g (for waveform viewer) or ./launch_hw_emu.sh -run-app $(EMBEDDED_EXEC_SCRIPT) (to check results without opening waveform viewer) ...

ハードウェア エミュレーションが起動すると、QEMU シミュレータ ロードが表示されます。自動ブート カウントダウンがゼロになるまで待ちます。数分後、root Linux プロンプトが表示されます。

root@versal-rootfs-common-2024_1:~#

root プロンプトが表示されたら、次のコマンドを入力してデザインを実行します。

mount /dev/mmcblk0p1 /mnt
cd /mnt
./gemm_aie_xrt.elf a.xclbin

gemm_aie_xrt.elf が実行されます。数分後、TEST PASSED という出力がコンソールに表示されるはずです。これが表示されたら、次のキーワード コマンドを入力して QEMU インスタンスを終了します。

#To exit QEMU Simulation
Press CtrlA, let go of the keyboard, and then press x 

波形を使用して実行する手順は、次のとおりです。

cd $(BUILD_TARGET_DIR)/package
./launch_hw_emu.sh -g

XSIM 波形ビューアーが起動します。ビューアーに信号をドラッグ アンド ドロップし、[Play] をクリックしてエミュレーションを開始します。ターミナルに戻り、Linux プロンプトが表示されるまで待ちます。XSIM 波形ビューアーでは、波形に追加した信号が表示され、デザインの実行が調整されます。これが終わったら、[Pause] ボタンをクリックし、ウィンドウを閉じてエミュレーションを終了します。

次の図に、gemm_32x32x32 - 1x デザインの波形を示します。

32X32x32 デザインの波形ビューで実行された GeMM AIE HW_EMU の画像

TARGET=hw: ハードウェアでの実行

ハードウェアでの実行

ハードウェアでデザインを実行するには、次の make ステップを、TARGET=hw およびその他の該当オプション (上記に示した make ステップを参照) を使用して再実行します。

make kernels xsa package TARGET=hw 

これらのコマンドは、ハードウェアでの実行用にカーネル、XSA、および package を含む $(BUILD_TARGET_DIR) フォルダーを作成します。

次のステップを実行し、実行ファイル、生成されたイメージ、およびベース イメージ ($(BUILD_TARGET_DIR)/package/sd_card および $(BUILD_TARGET_DIR)/package/sd_card.img) を設定します。

make run_emu TARGET=hw 

これらのコマンドは、ハードウェアでの実行用にカーネル、XSA、および package を含む build/hw フォルダーを作成します。手順 1 ~ 9 に従い、VCK190 ボードで gemm_aie_xrt.elf 実行ファイルを実行します。

手順 1: ボードの電源がオフになっていることを確認します。

手順 2: SD カード ライター (balenaEtcher など) を使用して sd_card.img ファイルを SD カードのフラッシュ メモリに書き込みます。

手順 3: フラッシュ メモリに書き込んだ SD カードを VCK190 ボードの一番上のスロットに挿入します。

手順 4: スイッチを設定します (SW1 Mode\[3:0\]=1110 = OFF OFF OFF ON)。

手順 5: ボードに同梱されている USB ケーブルを使用して、VCK190 ボードにコンピューターを接続します。

手順 6: TeraTerm ターミナルを開き、正しい COM ポートを選択します。ポート設定を次のように指定します。

Port: <COMMXX>
Speed: 115200
Data: 8 bit
Parity: none
Stop Bits: 1 bit
Flow control: none
Transmit delay: 0 msec/char 0 msec/line

手順 7: ボードに電源を投入します。

手順 8: root@versal-rootfs-common-2024.1 Linux コマンド プロンプトが表示されるまで待ちます。xinit エラーが表示されなくなるまで Enter キーを数回押します。

手順 9: TeraTerm ターミナルで次のコマンド実行します。

cd /mnt/sd-mmcblk0p1

./gemm_aie_xrt.elf a.xclbin

ハードウェア デザインの詳細

GeMM AI エンジン インプリメンテーション アーキテクチャおよび AI エンジン/PL ファンクション分割

GeMM AI エンジン インプリメンテーション アーキテクチャおよび AI エンジン/PL ファンクション分割

次の図に、デザインの概略ブロック図を示します。テスト ハーネスは、AI エンジンおよびデータ ムーバー HLS カーネル (dma_hls) で構成されます。この設定では、データ ムーバー カーネルと AI エンジン間に、データ幅 128 ビットの AXI4-Stream インターフェイスがあります。データ ムーバー カーネルおよび AI エンジン アレイ インターフェイスは 312.5 MHz で実行しています。

データ ムーバーは PL ベースのデータ ジェネレーターおよびチェッカーで、入力として定数行列を生成し、その出力に対して gemm コアの出力をチェックします。

32x32x32 から 1024x1024x1024 までの行列の GeMM ブロック図

GeMM AIE インプリメンテーション アーキテクチャ、GeMM 32x32x32 ~ 1024x1024x1024 のイメージ

デザインの詳細