玫瑰幻想 发表于 2013-10-31 14:32
以及,您这是Store效率的问题所在,而不是load的。
这里的double2 和我自己定义的compx 其实是一样的。我把修改后的代码附上
if(i<row&&j<col)
{
float pupil = pupil_d[idx];
float wavefront1 = 0;
double wf65[15];
double zercoef[15];
compx P1;
compx P2;
//#pragma unroll
for(int k=2;k<Zs;k++)
{
wf65[k]=wf65_d[k*col*row+idx];
zercoef[k]=zercoef_d[k];
wavefront1 += wf65[k] * zercoef[k];
}
float wavefront2 = wavefront1 + theta_d[idx];
P1.real = pupil * __cosf(wavefront1);
P1.imag = pupil * __sinf(wavefront1);
P2.real = pupil * __cosf(wavefront2);
P2.imag = pupil * __sinf(wavefront2);
((compx *)P1_d)[idx] = P1;
((compx *)P2_d)[idx] = P2;
}
可是Global Load Efficiency 还是50% |