本帖最后由 yuanwcj 于 2013-11-20 16:08 编辑
kernel如下所示,将计算结果分别存储输出到2组指针数组中
用到了2个不同类型的share内存
kernel调用的时候只用了1个block块*1024个线程
出现的问题是,pResult中的数据是正常的,但是pResult2中的数据却是些很异常的数,而另外2组pIndex的值却又是正常的
__global__ static void kernel(cufftComplex *pSource,float *pResult,float *pResult2,int *pIndex,int *pIndex2)
{
const int threadID= threadIdx.x;
extern __shared__ float ABSResult[];
extern __shared__ int IndexTmp[];
cufftComplex valueTmp=*(pSource+threadID);//取值
ABSResult[threadID]=(valueTmp.x*valueTmp.x*0.0001f+valueTmp.y*valueTmp.y*0.0001f);
*(pResult+threadID)=ABSResult[threadID]; //存储到结果1
IndexTmp[threadID]=threadID;
*(pIndex+threadID)=IndexTmp[threadID]; //存储到序号1
*(pResult2+threadID)=ABSResult[threadID]; //存储到结果2
*(pIndex2+threadID)=IndexTmp[threadID]; //存储到序号2
}
感觉是共享内存ABSResult的值被修改了,请问这个是怎么回事,谢谢 |