DSP 库
HiFi 5 信号处理库
简介
HiFi 5 NatureDSP(NDSP)库,即 NatureDSP 信号处理库,提供了大量针对 HiFi 5 DSP 的高度优化 DSP 函数。
该源代码库包含兼容 ANSI-C 语言的 C 函数,适用于通用信号处理(滤波、相关性、卷积)、数学运算及向量运算,特别针对高密度信号处理进行了优化。库同时支持定点和单精度浮点数据类型。
{DSP_SDK}/lib/lib_hifi5 中提供了预编译好的 HiFi 5 NDSP 库。如有其他需求,也可以通过下载官方仓库代码自行编译。
更多信息
官方文档:GitHub 仓库压缩包解压后的 NDSP_HiFi5/library/doc 路径下
函数支持
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 文件完成编译,具体步骤如下:
从 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
打开 Xplorer 图形界面。
在 Xplorer 顶部的菜单栏中,依次选择
File->Import->Xtensa Xplorer->Import Xtensa Xplorer Workspace。在
Select Workspace File (.xws)中选择步骤 1 中预先下载好的 xws 文件,点击Next。在
Select Projects to be Imported页面,左侧的Projects列表中选中libxa_nnlib,然后点击Finish。导入成功后,在 Xplorer 顶部的工具栏中设置
P:libxa_nnlib、C:HIFI5_PROD_1123_asic_UPG、T:Release,然后点击Build Active进行编译。编译完成后,生成的库文件为xa_nnlib.a。备注
请根据实际需求选择正确的配置:
HIFI5_PROD_1123_asic_UPG或HIFI5_PROD_1123_asic_wUPG。
Linux 命令行编译
若在 Linux 环境中使用无图形界面的 Xplorer,可采用命令行方式进行编译,步骤如下:
根据实际环境设置以下环境变量:
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"
下载 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。
编译:
cd xa_nnlib/build xt-make -f makefile clean all install
编译完成后,生成的库文件为
xa_nnlib.a。