我有这个代码(我从FFT开发)并且看起来没问题,根据Visual Studio ...然后,当它到达块[a] [b]必须接收值时(即使它不是pow(),但只是expo_final,例如),块[a] [b]的值不会按照我的预期进行。
来源就在这里。
void twiddle_factor(float *d_isub_matrix)
{
double block[THREAD_SIZE][THREAD_SIZE];
float *d_osub_matrix = new float[THREAD_SIZE*THREAD_SIZE];
int a,b,c,d,x,y,z;
float sum_sines=0.0;
double expo1,expo2,expo_final;
float sum_cosines=0.0;
float sum_sin[THREAD_SIZE][THREAD_SIZE],sum_cos[THREAD_SIZE][THREAD_SIZE];
float angle=(2*PI)/THREAD_SIZE;
//put into shared memory the FFT calculation (F(u))
for(x=0;x<THREAD_SIZE;x++)
{
for(y=0;y<THREAD_SIZE;y++)
{
for(z=0;z<THREAD_SIZE;z++)
{
sum_sines=sum_sines+sin(d_isub_matrix[y*THREAD_SIZE+z]*(angle*(2*z)))+sin(d_isub_matrix[y*THREAD_SIZE+z]*(angle*(2*z+1)));
sum_cosines=sum_cosines+cos(d_isub_matrix[y*THREAD_SIZE+z]*(angle*(2*z)))+cos(d_isub_matrix[y*THREAD_SIZE+z]*(angle*(2*z+1)));
}
sum_sin[x][y]=sum_sines/(2*THREAD_SIZE);
sum_cos[x][y]=sum_cosines/(2*THREAD_SIZE);
}
}
//getting the value!
for(a=0;a<THREAD_SIZE;a++)
{
for(b=0;b<THREAD_SIZE;a++)
{
expo1=exp(sum_sin[a][b]);
expo2=exp(sum_cos[a][b]);
expo_final=expo1+expo2;
block[a][b]=expo_final;
}
}
其中定义了ARRAY_SIZE和THREAD_SIZE,它们的值为64(ARRAY)和32(THREAD)。 我验证了sum_sines,sum_cosines,sum_sin [] [],sum_cos [] [],angle,expo1,expo2和expo_final的值。直到最后一个,一切都很好。他们返回一些消极和积极的价值观。 但是我无法获得block [] []的值。谁知道发生了什么?
答案 0 :(得分:4)
这是你的问题:
for(b=0;b<THREAD_SIZE;a++)