2013-03-18 137 views
-1

我有一些代碼,我想用霓虹燈指令來改變它,但我真的不知道如何完成它...任何人都可以幫助我嗎?手臂霓虹燈指令

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

回答

0

通過使用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次迭代過程一次完成,當大小是4

+0

謝謝多隻會工作。但是,在代碼中:temp1 = vmlaq_f32(temp2,tempt,temp1)可能會被temp = vmullq_f32(temptt,temp2)替換; temp1 = vaddq(temp1,temp); ....這樣對嗎? – user2182911 2013-03-19 14:07:37