C语言 如何将 SSE 应用于长度不保证为 4 的倍数的数组



我目前正在使用如下一些函数:

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

最新更新