gpt4 book ai didi

c - C 中的 SSE 编程 — 大小不能被 4 整除怎么办?

转载 作者:行者123 更新时间:2023-12-04 11:59:37 24 4
gpt4 key购买 nike

这是确定矩阵是否具有正交列的代码。当我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com