RISC-V是一个相对较新的平台,在物联网市场中越来越受欢迎。2020年,OpenCV开始支持该平台。
有效执行各种图像处理、计算机视觉和机器学习算法需要矢量/SIMD指令,许多现代CPU架构都提供了这些指令。在RISC-V的情况下,OpenCV依赖于所谓的V扩展(简称RVV)。在撰写本文时,该扩展的规范仍未最终确定。然而,一些工具(编译器、软件模拟器)已经可用,基于某些标准的草案版本的实际硬件正在准备推出。
尽管不同的CPU架构具有不同的矢量指令,但OpenCV中许多时间关键的内核都使用我们自己的跨平台Wide Universal Intrinsics进行优化——轻量级内联函数,具有统一的跨平台API和平台特定的实现(使用本机内部函数,例如x64平台上的SSE/AVX内部函数,ARM上的NEON内部函数等)。您可以在core模块中找到相应的实现:https://github.com/opencv/opencv/tree/master/modules/core/include/opencv2/core/hal。在RISC-V的情况下,我们提供了两个并行实现,intrin_rvv.hpp(基于中国科学院提供的最新草案标准)和intrin_rvv071.hpp(由平头哥半导体有限公司贡献:)。
为平头哥的玄铁910 CPU构建OpenCV:
从https://github.com/opencv下载opencv和opencv_extra存储库的主分支。假设您将它们分别放在HOME/projects/opencv和HOME/projects/opencv_extra中。
从https://github.com/damonyu1989/Tools下载工具链和qemu模拟器(除非您已经有真实的硬件进行测试)。解压工具,将它们放在某个目录中,例如/opt/rvv071,并将/opt/rvv071/bin添加到PATH中(例如在~/.bashrc中)。同时,设置OPENCV_TEST_DATA_PATH环境变量:
export PATH=/opt/rvv071/bin:$PATH
export OPENCV_TEST_DATA_PATH=$HOME/projects/opencv_extra/testdata
配置OpenCV(在Ubuntu 20.04 x64上测试):
mkdir $HOME/projects/build/opencv_rvv071
cd $HOME/projects/build/opencv_rvv071
cmake ../../opencv -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="../../opencv/platforms/linux/riscv64-0.7.1-gcc.toolchain.cmake" -DWITH_OPENCL=OFF -DBUILD_opencv_calib3d=ON -DBUILD_ZLIB=ON -DBUILD_PNG=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_WITH_INSTALL_RPATH=1 -DCMAKE_INSTALL_PREFIX=./install
make -j8
make install # 可选
现在您可以在真实硬件或QEMU模拟器上运行测试。在后一种情况下,您可以使用以下命令运行:
cd bin
qemu-riscv64 ./opencv_test_core
|