You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMSIS-NN中#if defined(ARM_MATH_DSP)&&!defined(ARM_MATH_MVEI)判断的原因

CMSIS-NN中ARM_MATH_DSP与ARM_MATH_MVEI分支判断的原因解析

先明确两个宏的核心含义:

  • ARM_MATH_DSP:对应支持传统DSP指令集的Cortex-M内核(比如M4、M7、M33),开启后会启用基于DSP/NEON指令的向量化实现。
  • ARM_MATH_MVEI:对应支持MVE(M-Profile向量扩展)的Cortex-M内核(比如M55、M85),MVE是比传统DSP指令更强大的向量扩展,指令集更灵活、批量处理效率更高。

为什么要加!defined(ARM_MATH_MVEI)的判断?

  1. 性能优先级:CMSIS-NN为MVEI内核单独提供了更高效的MVE优化版本(比如同功能的arm_relu_q15会有对应的MVE实现文件)。当内核同时支持DSP和MVEI时,MVE版本的性能远优于传统DSP版本,因此需要屏蔽DSP向量化代码,确保编译器选用更优的MVE实现。
  2. 避免编译冲突:如果同时开启两个宏,会存在两套功能重复的向量化代码,可能导致编译时符号重复定义的错误,或者链接器错误选择旧版本代码。

这个判断是不是冗余操作?

完全不是冗余。部分Cortex-M内核(比如M55)同时支持DSP和MVEI指令集,此时必须通过!defined(ARM_MATH_MVEI)来区分场景:

  • 当MVEI未定义时:使用DSP向量化实现;
  • 当MVEI定义时:跳过DSP版本,转而使用专门的MVE优化代码。

如果去掉这个判断,在MVEI内核上会编译出性能较差的DSP版本,甚至引发编译冲突。

内容的提问来源于stack exchange,提问作者王舒心

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:08:16