【发布时间】:2020-01-07 18:40:02
【问题描述】:
我尝试编写一段简单的 NEON 代码,但发现它比常规 C++ 实现要慢。代码如下
float A[] = {1,2,3,4};
float B[] = {2,3,4,5};
float32x4_t v1;
float32x4_t v2;
int counter = 1000000;
while(counter--){
v1 = vld1q_f32(A);
v2 = vld1q_f32(B);
v = vaddq_f32(v1,v2);
vst1q_f32(A,v);
// A[0] = A[0]+B[0]; // regular implementation
// A[1] = A[1]+B[1]; // regular implementation
// A[2] = A[2]+B[2]; // regular implementation
// A[3] = A[3]+B[3]; // regular implementation
}
我搜索了原因,所以我猜是因为顺序管道和这个简单的任务导致 CPU 停顿?但是有人能帮忙解释得更详细吗?有什么方法可以提高这个 NEON 实现的性能?还是在面对这种简单的任务时使用常规实现比使用 NEON 更好?谢谢你。
【问题讨论】: