我正在编译 cmsis-nn 库,该库中有一些函数确定“#if Defined(ARM_MATH_DSP) && !define(ARM_MATH_MVEI)”。
例如arm_relu_q15.c。他的样子是:如果判断成功就使用向量化的方式,否则就是正常的循环。这是为什么,我无法理解为什么MVEI扩展会影响DSP扩展。
我想知道为什么,以及检测 MVEI 未定义是否是多余的。
不,这并不多余。这是检测 M 内核上 Helium 技术扩展的常用方法,因为并非所有支持 DSP 的都支持 MVE(我认为它是在 M55 中添加的)。
如果内核支持 DSP 但不支持 MVE,则使用矢量化的参考 ARM 实现,否则它只是普通循环(如果内核碰巧支持 DSP 和 MVE,则无论如何它都会自动矢量化)。