const int bid=blockIdx.x;
const int tid=threadIdx.x;
extern shared float Temp1;
extern shared float Temp2;
Temp1[tid]=0.0f;
Temp2[tid]=0.0f;
for (int i=tid;i<200;i+=blockDim.x) //blockDim.x=128
{
Temp1[tid]+=1.0; //这样应该是temp1[0]=2.0…temp1[71]=2.0,temp1[72]=1…temp1[127]=1
Temp2[tid]+=2.0; //temp2[0]=4.0…temp1[71]=4.0,temp1[72]=2.0…temp1[127]=2.0
}
__syncthreads();
(但是得出的结果似乎告诉我,这里并没有按照我想向德那样赋值)
for (unsigned int n=(blockDim.x>>1);n>0;n>>=1)
{
if (tid<n)
{
Temp1[tid]+=Temp1[tid+n];
Temp2[tid]+=Temp2[tid+n];
}
__syncthreads();
}
我分配了sizeof(float)*256大小的sharedmemory ,这是我的global函数内容,可以看到我在kernel函数中定义了两个shared数组 temp1和2,这时运算之后的temp2[0]不是等于400.0,temp1[0]也不等于200.0.我试过用一个shared数组时不出错,但是用两个是就出错,这是为什么?