arm霓虹灯指令

arm霓虹灯指令,arm,vectorization,simd,neon,Arm,Vectorization,Simd,Neon,我有一些代码,我想用霓虹灯指令来改变它,但我真的不知道如何完成它。。。有人能帮我吗 void add(int n,float *a,float *b,float t) { int i, size = (n+2) * (n+2); for(i = 0; i < size; i++) a[i] += t * b[i]; } void add(整数n,浮点*a,浮点*b,浮点t){ 整数i,大小=(n+2)*(n+2); 对于(i=0;i

我有一些代码,我想用霓虹灯指令来改变它,但我真的不知道如何完成它。。。有人能帮我吗

void add(int n,float *a,float *b,float t) {
    int i, size = (n+2) * (n+2);
    for(i = 0; i < size; i++)
        a[i] += t * b[i];
}
void add(整数n,浮点*a,浮点*b,浮点t){
整数i,大小=(n+2)*(n+2);
对于(i=0;i
通过使用霓虹灯内部元件。。大概是这样的:

void add(int n,float *a,float *b,float t) {
  int i, size = (n+2) * (n+2);
  float32x4_t temptt = vdupq_n_f32(t);
  for(i = 0; i < size; i+=4) {
    float32x4_t temp1 = vld1q_f32(a+i);
    float32x4_t temp2 = vld1q_f32(b+i);
    temp1 = vmlaq_f32(temp2, tempt, temp1);
    vst1q_f32(a + i, temp1);
  }
}
void add(整数n,浮点*a,浮点*b,浮点t){
整数i,大小=(n+2)*(n+2);
float32x4_t testt=vdupq_n_f32(t);
对于(i=0;i

这将一次执行4次迭代,并且仅在大小为4的倍数时才起作用。

谢谢。但是,在代码中:temp1=vmlaq_f32(temp2,test,temp1)可以替换为temp=vmullq_f32(testt,temp2);temp1=vaddq(temp1,temp)。。。。是这样吗?