未知分段错误问题 [英] unknown segmentation fault issue
问题描述
我有一个是推动我疯了分割故障问题。
I have a segmentation fault problem that is driving me crazy.
这是code:
for (k = 0; k < range; k=k+4)
{
int k1,k2,kfactor,k1factor,k2factor;
__m128 bfly0_rv, bfly1_rv, bfly2_rv, bfly3_rv;
__m128 bfly0_iv, bfly1_iv, bfly2_iv, bfly3_iv;
__m128 x_n2_vec, x_N2_vec, x_N2_2_vec, x_N2_3_vec;
__m128 y_n2_vec, y_N2_vec, y_N2_2_vec, y_N2_3_vec;
///////////
//factors//
///////////
k1=2*k;
k2=3*k;
kfactor = k * factor;
k1factor = k1 * factor;
k2factor = k2 * factor;
//printf("%d \t %d \t %d \n",kfactor,k1factor,k2factor);
//////////////
//Load input//
//////////////
//real parts//
__M128_MM_LOAD_PS(x_n2_vec,&x[n2]);
__M128_MM_LOAD_PS(x_N2_vec,&x[N2]);
__M128_MM_LOAD_PS(x_N2_2_vec,&x[N2_2]);
__M128_MM_LOAD_PS(x_N2_3_vec,&x[N2_3]);
//imaginary parts//
__M128_MM_LOAD_PS(y_n2_vec,&y[n2]);
__M128_MM_LOAD_PS(y_N2_vec,&y[N2]);
__M128_MM_LOAD_PS(y_N2_2_vec,&y[N2_2]);
__M128_MM_LOAD_PS(y_N2_3_vec,&y[N2_3]);
///////////////
//butterflies//
///////////////
//additions//
//Butterfly 0//
__M128_MM_ADD_PS(bfly0_rv,x_n2_vec,x_N2_vec)
__M128_MM_ADD_PS(bfly0_rv,bfly0_rv,x_N2_2_vec)
__M128_MM_ADD_PS(bfly0_rv,bfly0_rv,x_N2_3_vec)
__M128_MM_ADD_PS(bfly0_iv,y_n2_vec,y_N2_vec)
__M128_MM_ADD_PS(bfly0_iv,bfly0_iv,y_N2_2_vec)
__M128_MM_ADD_PS(bfly0_iv,bfly0_iv,y_N2_3_vec)
//Butterfly 1//
__M128_MM_ADD_PS(bfly1_rv,x_n2_vec,y_N2_vec)
__M128_MM_SUB_PS(bfly1_rv,bfly1_rv,x_N2_2_vec)
__M128_MM_SUB_PS(bfly1_rv,bfly1_rv,y_N2_3_vec)
__M128_MM_SUB_PS(bfly1_iv,y_n2_vec,x_N2_vec)
__M128_MM_SUB_PS(bfly1_iv,bfly1_iv,y_N2_2_vec)
__M128_MM_ADD_PS(bfly1_iv,bfly1_iv,x_N2_3_vec)
//Butterfly 2//
__M128_MM_SUB_PS(bfly2_rv,x_n2_vec,x_N2_vec)
__M128_MM_ADD_PS(bfly2_rv,bfly2_rv,x_N2_2_vec)
__M128_MM_SUB_PS(bfly2_rv,bfly2_rv,x_N2_3_vec)
__M128_MM_SUB_PS(bfly2_iv,y_n2_vec,y_N2_vec)
__M128_MM_ADD_PS(bfly2_iv,bfly2_iv,y_N2_2_vec)
__M128_MM_SUB_PS(bfly2_iv,bfly2_iv,y_N2_3_vec)
//Butterfly 3//
__M128_MM_SUB_PS(bfly3_rv,x_n2_vec,y_N2_vec)
__M128_MM_SUB_PS(bfly3_rv,bfly3_rv,x_N2_2_vec)
__M128_MM_ADD_PS(bfly3_rv,bfly3_rv,y_N2_3_vec)
__M128_MM_ADD_PS(bfly3_iv,y_n2_vec,x_N2_vec)
__M128_MM_SUB_PS(bfly3_iv,bfly3_iv,y_N2_2_vec)
__M128_MM_SUB_PS(bfly3_iv,bfly3_iv,x_N2_3_vec)
printf("%f \t %f \t %f \t %f \t %f \t %f \t %f \t %f \n",bfly0_rv[0],bfly0_iv[0],bfly1_rv[0],bfly1_iv[0],bfly2_rv[0],bfly2_iv[0],bfly3_rv[0],bfly3_iv[0]);
printf("%f \t %f \t %f \t %f \t %f \t %f \t %f \t %f \n",bfly0_rv[1],bfly0_iv[1],bfly1_rv[1],bfly1_iv[1],bfly2_rv[1],bfly2_iv[1],bfly3_rv[1],bfly3_iv[1]);
printf("%f \t %f \t %f \t %f \t %f \t %f \t %f \t %f \n",bfly0_rv[2],bfly0_iv[2],bfly1_rv[2],bfly1_iv[2],bfly2_rv[2],bfly2_iv[2],bfly3_rv[2],bfly3_iv[2]);
printf("%f \t %f \t %f \t %f \t %f \t %f \t %f \t %f \n",bfly0_rv[3],bfly0_iv[3],bfly1_rv[3],bfly1_iv[3],bfly2_rv[3],bfly2_iv[3],bfly3_rv[3],bfly3_iv[3]);
n2 = n2 + 4;
N2 = N2 + 4;
N2_2 = N2_2 + 4;
N2_3 = N2_3 + 4;
}
分割故障是当我使用了蝴蝶的printf。我打印了蝴蝶的值,因为我想确保所有的计算都正确完成。
the segmentation fault comes when i use the printf for the butterflies. I'm printing the values of the butterflies because i want to be sure that all the calculations are done properly.
我做了什么错?
注意
范围正在采取以下值(1024,256,64,16,4,1)
range is taking the following values (1024,256,64,16,4,1)
X float型数组实数
x array of floats for reals
是浮标阵列的想象
数组大小为4096
我使用的是英特尔内部函数,所以我装在一个时间4个值。
I'm using Intel intrinsics so I'm loading 4 values at a time.
推荐答案
根据MSDN(的 https://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx ):
您不应该直接访问__m128领域。你可以,但是,请在调试器中这些类型。类型的变量__m128映射到XMM [0-7]寄存器。
You should not access the __m128 fields directly. You can, however, see these types in the debugger. A variable of type __m128 maps to the XMM[0-7] registers.
所以,可能你遇到了哪些超过警戒试图让你避免的情况。
So possibly you run into a situation which the warning above tried to make you avoid.
这篇关于未知分段错误问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!