Репозиторий для практической работы по оптимизации умножения матриц для архитектуры RISC-V с помощью RISC-V THEAD Matrix Extention
Разработать реализацию блочного умножения матриц с float элементами используюя инструкции матричного расширения THEAD.
Размер блока должен быть 4х4. Референсная реализация для квадратных матриц gemm_block4x4_ref.
- Описание инструкций матричного расширения
- RVM intrinsics
- Пример использования матричного расширения (поэлементное умножение матриц с целыми числами)
- Создать fork репозитория.
- Настроить окружение с помощью скрипта env.sh.
- Собрать проект с помощью скрипта build.sh.
- Запустить тесты на RISC-V Qemu для квадратных и прямоугольных матриц.
- Реализовать gemm_block4x4_rvm, используя инструкции из матричного расширения:
- Для квадратных матриц с размерами, кратные 4. Должны проходить тесты
_build/test/test_rvm_square
. - Опционально: Для произвольных размеров матриц должны проходить тесты
_build/test/test_rvm_nonsquare
.
- Для квадратных матриц с размерами, кратные 4. Должны проходить тесты
- Открыть Pull Request c оптимизациями.
- Соотвествующий произведенным оптимизациям CI должен быть зеленым.
- lib - библиотека с реализацией умножения матриц
- test - функциональные тесты для проверки корректности алгоритмов
После запуска скрипта настройки окружения env.sh в корневой папке репозитория должна быть папка tools
с gcc
(тулчейн для кросс-компиляции) и qemu
(RISC-V симулятор).
Для сборки проекта можно использовать скрипт build.sh. В нем выставлены пути для кросс-компиляторов относительно путей в шаге настройке окружения. Можно изменить параметры сборки (например, BUILD_TYPE
для отладки)
Опции конфигурации проекта:
ENABLE_TEST
- Сборка тестов (ON
\OFF
)BUILD_TYPE
- Режим сборки (Release
\Debug
)BUILD_FOLDER
- Папка для артефактов сборкиBUILD_STATIC
- Включить статическую линковку (ON
\OFF
)
./tools/qemu/bin/qemu-riscv64 -cpu c907fdvm-rv64 ./_build/test/test_rvm_square
./tools/qemu/bin/qemu-riscv64 -cpu c907fdvm-rv64 ./_build/test/test_rvm_nonsquare
где c907fdvm-rv64
нужен для поддержки RISC-V Matrix Extention
В случае ошибки:
qemu-riscv64: Could not open '/lib/ld-linux-riscv64-lp64d.so.1': No such file or directory
необходимо сконфигурировать проект с -DBUILD_STATIC=ON
или добавить ключ запуска -L ./tools/gcc/sysroot/