可能是因为在使用ARM NEON Intrinsics时,代码未能正确地向量化。下面是一个范例,展示了如何使用ARM NEON Intrinsics执行向量乘法:
#include
void vector_multiply_neon(float32_t* a, float32_t* b, float32_t* out, int size)
{
int i;
float32x4_t vec_a, vec_b, out_vec;
for (i = 0; i < size; i += 4)
{
vec_a = vld1q_f32(a + i);
vec_b = vld1q_f32(b + i);
out_vec = vmulq_f32(vec_a, vec_b);
vst1q_f32(out + i, out_vec);
}
}
这里使用float32x4_t数据类型定义一个128位的向量,然后在循环中使用vld1q_f32和vst1q_f32加载和存储向量,使用vmulq_f32执行向量乘法。
通过正确使用ARM NEON Intrinsics,您应该能够在性能上获得显著的改善。