2.2.0 NNAPI / ARMv8.6 矩阵乘指令支持
一、框架通用性
- 新增对
ARMv8.6-A
指令支持,支持了smmla
和bfmmla
指令的使用 - 新增
NNAPI
后端,能够利用Android设备上的NPU/APU/DSP进行计算 - 新增汇编预处理脚本,能够将汇编指令转换为
.inst
指令,降低新指令对编译器的依赖 - 新增A16和M2 CPU family支持
- 训练模块新增Selu / StridedSlice / TopKV2 / Scale / Broadcastto 等求导算子
- 新增Interp3D / ConvTranspose3D支持(感谢开源群伙伴贡献)
二、性能优化
-
新增ARMv8.6指令支持后,GemmInt8, GemmBF16性能提升
-
MNN-NNAPI后端支持,NNAPI使用accelerator设备进行推理,在中端和高端设备上相比CPU单线程均有性能优势;在高端设备上相比CPU 4线程仍有性能优势。
-
CUDA性能优化,Depthwise卷积、Raster快速计算、Im2Col等优化,MobileNet/Squeezenet等模型性能提升
三、其他
- 进行了部分代码重构(包括但不限于)
- 对于包含多个SubModule的复杂模型, 复用子模型间共性tensor,重新构建计算图和指令队列,显著降低大内存操作的耗时
- 修复了如下 Bug(包括但不限于)
- Onnx Resize 在指定 scale 且输入输出无法整除时,计算错误
- 修复在不支持SSE 4.1 ,但支持SSE3的设备上打开SSE执行Crash的问题
- 修复部分情况下多输入Conv转换错误
- 修复ARM82后端GridSampler在Linux上的编译错误
- 修复Conv1dSqueezeMove在Squeeze双输入时计算出错的问题
- 修复输入为NC4HW4时,stride计算错误的问题
- 修复HIAI后端编译错误,Binary BUG
- 新增Tflite Prelu 模型转换支持(仅支持slope为常量情况)