-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];
}
我有一些代碼,我想用霓虹燈指令來改變它,但我真的不知道如何完成它...任何人都可以幫助我嗎?手臂霓虹燈指令
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];
}
通過使用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
謝謝多隻會工作。但是,在代碼中:temp1 = vmlaq_f32(temp2,tempt,temp1)可能會被temp = vmullq_f32(temptt,temp2)替換; temp1 = vaddq(temp1,temp); ....這樣對嗎? – user2182911 2013-03-19 14:07:37