dor*_*mon 0 c optimization sse vectorization
我目前正在使用以下功能:
void vadd(float * a, float * b, int n){
for(int i = 0; i < n; i++){
a[i] += b[i];
}
}
Run Code Online (Sandbox Code Playgroud)
这个循环基本上可以用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];
}
}
Run Code Online (Sandbox Code Playgroud)