2021年4月7日水曜日

Vitis 2020.2でVitis LIbraryのresize_accelを試してみた話

resize_accelのテストをしたときのメモ。

環境

  • ubuntu:20.04
  • vitis:2020.2
  • yocto:zeus(https://github.com/akira-nishiyama/petalinux-ros2-manifests feature-v2020.2ブランチ)
  • board:ultra96v2(https://github.com/akira-nishiyama/ultra96v2_4z.git feature-v2020.2ブランチ)

sw_emu

ビルド

以下のコマンドで必要なデータ生成される。 cmakeの-DBUILD_TARGETをhw_emuにするとハードウェアエミュレーション、hwにすると実機用のデータが生成される。 はacceleration platformを作成するのに必要なファイルを保存しているパス。 必要に応じて置き換えること。 cmakeを実行するとどのように期待しているかのメッセージが表示されるので参考にすること。

git clone https://github.com/akira-nishiyama/orb_slam_2_ros.git -b feature-resize-accel
source <path-to-sdk>/environment_setup
source /opt/Xilinx/Vitis/2020.2/settings64.sh
cd orb_slam_2_ros/orb_slam2
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_SO_NO_EXE=0 -DBUILD_TARGET=sw_emu -DPLATFORM_COMPONENTS_PATH=<path-to-components-required-files> -DBUILD_TEST_TARGETS=ON -GNinja
make -j4

実行

cd hw_link/package_sw_emu/
source /opt/Xilinx/Vitis/2020.2/settings64.sh
./launch_sw_emu.sh -pid-file emulation.pid -no-reboot -forward-port 1440 1534 -forward-port 2222 22

ターミナル起動後は次のコマンドを実行する。 デバッグが必要な場合はvitis -debugでxf_resize_tbを起動する。

root@ultra96v2-zynqmp:~# cd /mnt/sd-mmcblk0p1/
root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# export XCL_EMULATION_MODE=sw_emu
root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# mkdir xclbin
root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# cp binary_container_2_sw_emu.xclbin xclbin/krnl_resize.sw_emu.avnet_com_av_ULTRA96V2_1_0.xclbin

profile結果が得られるようにxrt.iniを作成する。

root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# vi xrt.ini
[Debug] 
profile=true
timeline_trace=true
trace_buffer_size=1M

結果

root@ultra96v2-zynqmp:/media/sd-mmcblk0p1# ./xf_resize_tb 128x128_1.png 64 64
INFO: Running OpenCL section.
Found Platform
Platform Name: Xilinx
INFO: Device found - avnet_com_av_ULTRA96V2_1_0
XCLBIN File Name: krnl_resize
INFO: Importing xclbin/krnl_resize.sw_emu.avnet_com_av_ULTRA96V2_1_0.xclbin
Loading: 'xclbin/krnl_resize.sw_emu.avnet_com_av_ULTRA96V2_1_0.xclbin'
36905.7ms
    Minimum error in intensity = 0
    Maximum error in intensity = 1
    Percentage of pixels above error threshold = 0
Test Passed 
The maximum depth reached by any of the 4 hls::stream() instances in the design is 16384
root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# 

プロファイルの結果は次のようにして取得可能。 vitis -debugで実行した場合は自動的に取得される。

mkdir report_sw_emu
scp -P 2222 root@localhost:/mnt/sd-mmcblk0p1/xclbin.run_summary ./report_sw_emu
scp -P 2222 root@localhost:/mnt/sd-mmcblk0p1/profile_summary.csv ./report_sw_emu
scp -P 2222 root@localhost:/mnt/sd-mmcblk0p1/timeline_trace.csv ./report_sw_emu
vitis_analyzer report_sw_emu


hw_emu

ビルド

sw_emu実行後にリポジトリのtopから開始する。

cd orb_slam_2_ros/orb_slam2/build
cmake .. -DCMAKE_INSTALL_SO_NO_EXE=0 -DBUILD_TARGET=hw_emu -DPLATFORM_COMPONENTS_PATH=<path-to-components-required-files> -DBUILD_TEST_TARGETS=ON
make -j4

実行

cd hw_link/package_hw_emu/
./launch_hw_emu.sh -pid-file emulation.pid -no-reboot -forward-port 1440 1534 -forward-port 2222 22

ターミナル起動後は次のコマンドを実行する。 デバッグが必要な場合はvitis -debugでxf_resize_tbを起動する。

root@ultra96v2-zynqmp:~# cd /mnt/sd-mmcblk0p1/
root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# export XCL_EMULATION_MODE=hw_emu
root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# mkdir xclbin
root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# cp binary_container_2_hw_emu.xclbin xclbin/krnl_resize.hw_emu.edge.xclbin

profile結果が得られるようにxrt.iniを作成する。

root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# vi xrt.ini
[Debug] 
profile=true
timeline_trace=true
trace_buffer_size=1M

結果

root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1# ./xf_resize_tb 128x128_1.png 64 64
INFO: Running OpenCL section.
Found Platform
Platform Name: Xilinx
[  257.173751] [drm] Pid 1124 opened device
INFO: Device found - edge
XCLBIN File Name: krnl_resize
INFO: Importing xclbin/krnl_resize.hw_emu.edge.xclbin
Loading: 'xclbin/krnl_resize.hw_emu.edge.xclbin'
[  258.218452] [drm] get section DEBUG_IP_LAYOUT err: -22 
[  258.224260] [drm] get section AIE_METADATA err: -22 
[  258.230851] [drm] zocl_xclbin_read_axlf ad3f6288-9ebf-40e2-b7d2-da7e0ef9d155 ret: 0
[  258.329375] [drm] bitstream ad3f6288-9ebf-40e2-b7d2-da7e0ef9d155 locked, ref=1
[  258.339355] [drm] No ERT scheduler on MPSoC, using KDS
[  258.454364] [drm] scheduler config ert(0)
[  258.456924] [drm]   cus(1)
[  258.468834] [drm]   slots(16)
[  258.469260] [drm]   num_cu_masks(1)
[  258.469485] [drm]   cu_shift(16)
[  258.473936] [drm]   cu_base(0x80010000)
[  258.474516] [drm]   polling(0)
[  258.480007] [drm] bitstream ad3f6288-9ebf-40e2-b7d2-da7e0ef9d155 unlocked, ref=0
21509.8ms
    Minimum error in intensity = 0
    Maximum error in intensity = 1
    Percentage of pixels above error threshold = 0
Test Passed 
[  258.647570] [drm] bitstream ad3f6288-9ebf-40e2-b7d2-da7e0ef9d155 locked, ref=1
[  280.899806] [drm] bitstream ad3f6288-9ebf-40e2-b7d2-da7e0ef9d155 unlocked, ref=0
[  281.437319] [drm] Pid 1124 closed device
root@ultra96v2-zynqmp:/mnt/sd-mmcblk0p1#

プロファイルの結果は次のようにして取得可能。 vitis -debugの場合は自動的に取得される。

mkdir report_hw_emu
scp -P 2222 root@localhost:/mnt/sd-mmcblk0p1/binary_container_1_hw_emu.xclbin.run_summary ./report_hw_emu
scp -P 2222 root@localhost:/mnt/sd-mmcblk0p1/profile_summary.csv ./report_hw_emu
scp -P 2222 root@localhost:/mnt/sd-mmcblk0p1/timeline_trace.csv ./report_hw_emu
vitis_analyzer report_hw_emu


hw

ビルド

sw_emu実行後にリポジトリのtopから開始する。

cd orb_slam_2_ros/orb_slam2/build
cmake .. -DCMAKE_INSTALL_SO_NO_EXE=0 -DBUILD_TARGET=hw -DPLATFORM_COMPONENTS_PATH=<path-to-components-required-files> -DBUILD_TEST_TARGETS=ON -GNinja
make -j4

実行

引っ越しのために実機は梱包しているので未実施。

0 件のコメント:

コメントを投稿