Примеры использования
Архив buildroot/dl/dsp-elcore50-libraries.tar.gz
содержит пакет автоматизированных тестов
(подготовка тестовых данных, запуск, сравнение результатов) для всех библиотек. Пакет состоит из
тестов на базе pytest (исполняется на CPU) и тестовых кернелов для DSP.
Примеры и тесты, распространяемые в составе архива, предназначены для запуска на модуле с предварительно прошитыми образами по инструкции главы Дистрибутив Buildroot MCom-03 Linux SDK.
Предсобранные тесты предназначены для запуска с использованием утилиты elcorecl-run.
В главе Запуск тестов приведена инструкция по запуску всех тестов.
В главах dsplib, matrix-lib и signal-lib приведены инструкции с ручным запуском отдельных тестов из пакета.
Запуск тестов
Открыть терминал на хосте, к которому подключено целевое устройство. Подключиться через UART и выполнить команду:
minicom -D /dev/ttyUSBX # здесь X - номер USB устройства
Загрузить Linux на целевом устройстве.
Создать виртуальное окружение и установить в него зависимости:
# Загрузить uv wget \ https://github.com/astral-sh/uv/releases/download/0.5.4/uv-aarch64-unknown-linux-gnu.tar.gz \ --no-check-certificate --no-verbose tar --strip-components=1 -xzf uv-aarch64-unknown-linux-gnu.tar.gz # Создать виртуальное окружение ./uv --no-cache venv # Установить зависимости ./uv --no-cache pip install --no-progress \ -r /usr/share/elcore50/libraries/tests/requirements.txt
Запустить тесты:
# Определить путь, куда будут сохранены артефакты тестов tests_artifacts_path=<path> # Запустить тесты .venv/bin/pytest /usr/share/elcore50/libraries/tests \ --artifacts-path=$tests_artifacts_path \ --html=$tests_artifacts_path/report.html --self-contained-html \ --junitxml=$tests_artifacts_path/report.xml
При успешном выполнении тестов в директории tests_artifacts_path
будут сохранены csv-таблицы
с замерами времени выполнения БПФ и одномерной БПФ-свертки библиотеки elcore50-signal-lib. Также по
результатам тестов БПФ будут построены графики производительности и сохранены в
elcore50_fft_performance.png
. Для библиотек dsplib и matrix-lib артефакты не генерируются.
Возможен запуск тестов библиотек через pytest по отдельности. Для этого при запуске теста необходимо указать путь до требуемого теста:
.venv/bin/pytest tests/dsplib/test_dsplib.py \
--artifacts-path=$tests_artifacts_path \
--html=$tests_artifacts_path/report.html --self-contained-html \
--junitxml=$tests_artifacts_path/report.xml
dsplib
Пример запуска теста вычисления суммы векторов:
elcorecl-run -e /usr/share/elcore50/libraries/tests/dsplib/elf/test_add.elf
В случае успешного завершения программы в консоли будет следующая таблица:
func name | element count | ref tic | opt tic | TI tic | byte/tic opt | byte/tic TI | status |
-----------------------------------------------------------------------------------------------
add_short | 512 | 344 | 307 | 214 | 6.67 | 9.57 | passed |
add_short | 1024 | 483 | 305 | 406 | 13.43 | 10.09 | passed |
add_short | 2048 | 810 | 365 | 790 | 22.44 | 10.37 | passed |
add_short | 8192 | 2474 | 603 | 3094 | 54.34 | 10.59 | passed |
add_short | 16384 | 4702 | 987 | 6166 | 66.40 | 10.63 | passed |
add_int | 512 | 677 | 305 | 406 | 13.43 | 10.09 | passed |
add_int | 1024 | 850 | 336 | 790 | 24.38 | 10.37 | passed |
add_int | 2048 | 1320 | 429 | 1558 | 38.19 | 10.52 | passed |
add_int | 8192 | 4704 | 987 | 6166 | 66.40 | 10.63 | passed |
add_int | 16384 | 9161 | 1757 | 12310 | 74.60 | 10.65 | passed |
add_fl | 512 | 642 | 304 | - | 13.47 | - | passed |
add_fl | 1024 | 807 | 329 | - | 24.90 | - | passed |
add_fl | 2048 | 1338 | 496 | - | 33.03 | - | passed |
add_fl | 8192 | 4934 | 983 | - | 66.67 | - | passed |
add_fl | 16384 | 9720 | 1752 | - | 74.81 | - | passed |
add_db | 512 | 875 | 328 | - | 24.98 | - | passed |
add_db | 1024 | 1467 | 421 | - | 38.92 | - | passed |
add_db | 2048 | 2487 | 505 | - | 64.89 | - | passed |
add_db | 8192 | 9591 | 1658 | - | 79.05 | - | passed |
add_db | 16384 | 19227 | 3196 | - | 82.02 | - | passed |
Результаты в тактах могут отличаться. Здесь столбец ref tic
показывает время в тактах,
затраченное на выполнение данной операции референсной функцией на C, opt tic
—
оптимизированной версии, TI tic
— аналогичной операции в библиотеке DSPLIB для С66x от
Texas Instruments, столбец byte/tic opt
показывает скорость оптимизированной версии в
байтах/такт, byte/tic TI
— скорость операции в библиотеке DSPLIB для С66x.
matrix-lib
Пример запуска теста вычисления произведения матриц типа float32:
elcorecl-run -e /usr/share/elcore50/libraries/tests/matrix-lib/elf/test_mat_mul_fl32.elf
В случае успешного завершения программы в консоли будет следующая таблица:
| func_name | size (r0, c1r1, c1) | ref mul/tic | opt mul/tic | status |
----------------------------------------------------------------------------
| mat_mul_fl32 | 4 4 128 | 1.070 | 0.457 | passed |
| mat_mul_fl32 | 512 512 512 | 14.089 | 81.044 | passed |
| mat_mul_fl32 | 256 256 256 | 14.149 | 81.985 | passed |
| mat_mul_fl32 | 512 256 256 | 14.158 | 86.949 | passed |
| mat_mul_fl32 | 512 512 256 | 12.909 | 79.893 | passed |
| mat_mul_fl32 | 512 512 128 | 12.575 | 38.419 | passed |
| mat_mul_fl32 | 512 1024 256 | 9.095 | 76.991 | passed |
| mat_mul_fl32 | 49 2048 512 | 7.830 | 64.857 | passed |
| mat_mul_fl32 | 12544 16 96 | 7.466 | 42.901 | passed |
| mat_mul_fl32 | 3136 24 144 | 4.348 | 47.200 | passed |
| mat_mul_fl32 | 784 192 32 | 1.268 | 52.182 | passed |
| mat_mul_fl32 | 784 32 192 | 7.541 | 45.906 | passed |
| mat_mul_fl32 | 196 384 64 | 4.561 | 42.908 | passed |
| mat_mul_fl32 | 196 64 384 | 11.732 | 58.924 | passed |
| mat_mul_fl32 | 49 160 960 | 10.985 | 57.315 | passed |
| mat_mul_fl32 | 49 960 160 | 7.975 | 56.079 | passed |
----------------------------------------------------------------------------
Результаты в тактах могут отличаться. Здесь столбец ref mul/tic
показывает отношение количества
умножений к затраченному времени в тактах референсной функции на C, opt mul/tic
—
оптимизированной версии.
signal-lib
В составе архива для библиотеки существуют:
/usr/share/elcore50/libraries/tests/signal-lib
— полные тесты библиотеки./usr/share/elcore50/libraries/tests/signal-lib-examples
— упрощенные примеры для вычисления БПФ.
Пример запуска на плате примера вычисления одномерного БПФ для типа float16:
elcorecl-run -e /usr/share/elcore50/libraries/tests/signal-lib/elf/sample-fft-float16-1d.elf
В случае успешного завершения программы вывод будет следующим:
float16 1d sample result:
fft_size = 262144, passed!
Сборка тестов из исходного кода
Указать путь до директории aarch64-buildroot-linux-gnu_sdk-buildroot:
export AARCH64_BUILDROOT_SDK=<путь/до/aarch64-buildroot-linux-gnu_sdk-buildroot>
В директории с исходным кодом тестов выполнить:
export ELCORE50_LIBRARIES_CMAKE_PATH= \
$AARCH64_BUILDROOT_SDK/aarch64-buildroot-linux-gnu/sysroot/usr/share/elcore50/libraries/lib/cmake
cmake -B build \
-DCMAKE_TOOLCHAIN_FILE=$AARCH64_BUILDROOT_SDK/opt/toolchain-elcore50/share/cmake/elcore50-toolchain.cmake \
-DELCORE50_CL_BUILD=ON \
-DELCORE50_TARGET=MCom03 \
-DElcoreRuntime_DIR=$AARCH64_BUILDROOT_SDK/aarch64-buildroot-linux-gnu/sysroot/usr/lib/cmake/ElcoreRuntime \
-Delcore50-dsplib_DIR=$ELCORE50_LIBRARIES_CMAKE_PATH/elcore50-dsplib \
-Delcore50-matrix-lib_DIR=$ELCORE50_LIBRARIES_CMAKE_PATH/elcore50-matrix-lib \
-Delcore50-signal-lib_DIR=$ELCORE50_LIBRARIES_CMAKE_PATH/elcore50-signal-lib
cmake --build build