DSP 库

HiFi 5 信号处理库

简介

HiFi 5 NatureDSP(NDSP)库,即 NatureDSP 信号处理库,提供了大量针对 HiFi 5 DSP 的高度优化 DSP 函数。

该源代码库包含兼容 ANSI-C 语言的 C 函数,适用于通用信号处理(滤波、相关性、卷积)、数学运算及向量运算,特别针对高密度信号处理进行了优化。库同时支持定点和单精度浮点数据类型。

{DSP_SDK}/lib/lib_hifi5 中提供了预编译好的 HiFi 5 NDSP 库。如有其他需求,也可以通过下载官方仓库代码自行编译。

更多信息

函数支持

NDSP 库包含以下函数的实现:

  • FIR 滤波器及相关函数

  • IIR 滤波器

  • 数学运算

  • 复数数学运算

  • 向量运算

  • 矩阵运算

  • 矩阵分解与求逆函数

  • 拟合/插值

  • 快速傅里叶变换

  • 梅尔频率倒谱系数(MFCC)函数

  • 图像处理

更多详情请参阅 Cadence 官方文档。

HiFi 5 神经网络库

简介

HiFi 5 神经网络(NN)库 是针对 HiFi 处理器优化的神经网络层及底层运算的实现。该库专注于语音音频领域,专为相关神经网络设计。

库中的底层 NN 内核针对 HiFi 优化,是构成 NN 层的基础,提供了通用简洁的接口。NN 层则基于这些底层内核实现,可接收最多四维形状的输入数据,并生成相应形状的输出。

层操作所需的权重(或系数)及偏置均存储于外部。输入、输出、权重与偏置的形状均严格遵循各层设计规范。

{DSP_SDK}/lib/xa_nnlib 中提供了预编译好的 HiFi 5 神经网络库。如有其他需求,也可以通过下载官方仓库代码自行编译。

运算支持

  • 底层内核

    • 矩阵向量乘法内核

    • 卷积内核

    • 激活函数内核

    • 池化内核

    • 基础运算内核

    • 全连接内核

    • 标准化内核

    • 重组内核

    这些内核支持权重/系数、偏置、输入和输出使用定点 8 位、16 位、单精度浮点数 (float32/f32) 和半精度浮点数 (float16/f16) 数据类型。

    此外,部分内核也支持 TensorFlow (TF) 和 TensorFlowLite-Micro (TFLM) 中定义的 8 位和 16 位量化数据类型。这些数据类型对权重/系数、输入和输出使用 8 位/16 位量化值 (asym8u – 非对称 8 位无符号, asym8s – 非对称 8 位有符号, sym8s – 对称 8 位有符号)。偏置为 32 位量化值。

    • GRU 层 (8x16, 16x16 精度)

    • LSTM 层 (8x16, 16x16 精度)

    • CNN 层 (8x8, 8x16, 16x16 和 float32xfloat32 精度)

  • TensorFlow Lite Micro 算子

    HiFi 5 NN 库底层内核可用于实现 TensorFlow Lite Micro 的一些算子。对于适用的算子,HiFi 5 NN 库支持 TensorFlow Lite Micro 中可用的两种取整模式。

更多详情请参阅 Cadence 官方文档。

加速效果

使用 HiFi 5 神经网络库可以显著提升神经网络的推理速度。

{DSP_SDK}/example/tflite_micro/tflm_mnist 为例:

示例

不使用nnlib耗时(毫秒)

使用nnlib耗时(毫秒)

加速比

tflm_mnist

2378

72

33

nnlib 编译示例

本章以 xa_nnlib v2.3.0 为例,介绍 nnlib 库的编译方法。编译方式分为两种:通过 Xplorer 图形界面导入 xws 文件进行编译,以及在 Linux 命令行环境下进行编译。

Xplorer 图形界面编译

若使用带图形界面的 Xplorer,可通过导入 xws 文件完成编译,具体步骤如下:

  1. nnlib-hifi5 GitHub 仓库 下载对应版本的 xws 文件。以 v2.3.0 为例,对应的文件链接为:https://github.com/foss-xtensa/nnlib-hifi5/blob/master/xws/xa_hifi5_nnlib_lib_2_3_0_api_1_6_src.xws

  2. 打开 Xplorer 图形界面。

  3. 在 Xplorer 顶部的菜单栏中,依次选择 File -> Import -> Xtensa Xplorer -> Import Xtensa Xplorer Workspace

  4. Select Workspace File (.xws) 中选择步骤 1 中预先下载好的 xws 文件,点击 Next

  5. Select Projects to be Imported 页面,左侧的 Projects 列表中选中 libxa_nnlib,然后点击 Finish

  6. 导入成功后,在 Xplorer 顶部的工具栏中设置 P:libxa_nnlibC:HIFI5_PROD_1123_asic_UPGT:Release,然后点击 Build Active 进行编译。编译完成后,生成的库文件为 xa_nnlib.a

    备注

    请根据实际需求选择正确的配置:HIFI5_PROD_1123_asic_UPGHIFI5_PROD_1123_asic_wUPG

Linux 命令行编译

若在 Linux 环境中使用无图形界面的 Xplorer,可采用命令行方式进行编译,步骤如下:

  1. 根据实际环境设置以下环境变量:

    export XTENSA_BASE=/opt/xtensa/XtDevTools/install
    export XTENSA_TOOLS_VERSION=RI-2021.8-linux     # Xplorer 版本
    export XTENSA_CORE=HIFI5_PROD_1123_asic_UPG     # UPG 或 wUPG
    export XTENSA_SYSTEM=${XTENSA_BASE}/builds/${XTENSA_TOOLS_VERSION}/${XTENSA_CORE}/config
    export PATH="/opt/xtensa/XtDevTools/install/tools/RI-2021.8-linux/XtensaTools/bin:$PATH"
    
  2. 下载 v2.3.0 版本的源代码:

    git clone https://github.com/foss-xtensa/nnlib-hifi5.git
    cd nnlib-hifi5
    git checkout f5363c5   # v2.3.0 对应的 commit ID
    

    备注

    若需下载其他版本,请查阅官方提交记录,找到对应版本的 commit ID。

  3. 编译:

    cd xa_nnlib/build
    xt-make -f makefile clean all install
    

    编译完成后,生成的库文件为 xa_nnlib.a