这是确定矩阵是否具有正交列的代码。当我有 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 整除的数组?
最佳答案
您确定何时提前停止的代码在 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
}
关于c - C 中的 SSE 编程 — 大小不能被 4 整除怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14370471/