我目前正在使用如下一些函数:
void vadd(float * a, float * b, int n){
for(int i = 0; i < n; i++){
a[i] += b[i];
}
}
这个循环基本上可以使用 SSE 重写,但我的问题是如何处理如果 n 不是 4 的倍数,则遗漏的几个元素?
多谢鲍勃
您可以使用单独的循环处理最后n % 4
元素:
void vadd(float *a, float *b, int n)
{
int i = 0;
for (; i < n - n % 4; i += 4) {
a[i + 0] += b[i + 0];
a[i + 1] += b[i + 1];
a[i + 2] += b[i + 2];
a[i + 3] += b[i + 3];
}
for (; i < n; i++) {
a[i] += b[i];
}
}