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];
     }
 }
这个循环基本上可以用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]; 
    }
}