【问题标题】:arm neon instruction [closed]手臂霓虹灯指令[关闭]
【发布时间】:2013-03-06 23:52:13
【问题描述】:

我有一些代码,我想使用 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];
}

【问题讨论】:

    标签: arm vectorization simd neon


    【解决方案1】:

    通过使用 NEON 内在函数.. 像这样:

    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);
      }
    }
    

    这一次进行 4 次迭代,并且仅在 size 是 4 的倍数时才有效。

    【讨论】:

    • 谢谢。但是,在代码中: temp1 = vmlaq_f32(temp2,tempt,temp1) 可能替换为 temp = vmullq_f32(temptt,temp2); temp1 = vaddq(temp1,temp); ....对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2015-02-14
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多