如何解决ARM Neon - 将点积累积到输出索引
我想用下面的代码片段实现向量点积,其中向量 a
和 b
的点积可以添加到 c
的第一个位置,所以结果将[30,0]
。
#include <arm_neon.h>
#include "utils.h"
int main() {
float a[4]{1,2,3,4};
float b[4]{1,4};
float c[4];
float32x4_t A = vld1q_f32(a);
float32x4_t B = vld1q_f32(b);
float32x4_t C = vmovq_n_f32(0);
// Computation
vst1q_f32(c,C);
print_vector(c,4);
}
有没有用 Neon 来做到这一点的惯用方法?
解决方法
C = vmulq_f32(A,B);
float32x4_t zero = vmovq_n_f32(0);
vst1q_f32(c,zero);
float32x2_t D = vpadd_f32(vget_low_f32(C),vget_high_f32(C));
D = vpadd_f32(D,D);
vst1_lane_f32(c,D,0);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。