4

这是确定矩阵是否具有正交列的代码。当我有n可被 4 整除时,代码运行正常,但是当n不能被 4 整除时,程序意外停止(代码中提到的位置)

for(i=0;i<n-1;i++)
{
        for(j=i+1;j<n;j++)
        {
            sum = 0;  

            for(k=0;k<n-4;k+=4)
            {
                  X=_mm_load_ps(&D[n*i+k]);
                  Y=_mm_load_ps(&D[n*j+k]);
                   printf("fff");  //not printing , program stops here
                  acc = _mm_add_ps(acc,_mm_mul_ps(X,Y));

            }

            _mm_store_ps(&temp[0],acc);
            sum = temp[0]+temp[1]+temp[2]+temp[3];

            for(;k<n;k++){
                sum = sum + D[i*n+k]*D[j*n+k];
            }

            if(sum ==0)
                return 1;
         }

     }

    return 0;
}

可能的原因是什么?如何处理大小不能被 4 整除的数组?

4

1 回答 1

3

您确定何时提前停止的代码在for(k...)循环中不正确。尝试这样的事情:

int n4 = n - (n % 4);   // smallest multiple of 4 <= n
for (k=0; k < n4, k+=4) //replaces: for(k=0;k<n-4;k+=4) 
{ // loop body
}
for (k=n4; k < n; k++)
{ // non-vectorized loop for the last few columns
}
于 2013-01-17T01:55:22.283 回答