【发布时间】:2016-08-01 16:45:43
【问题描述】:
当将数组从全局内存加载到共享内存时,共享内存中的变量不符合我的要求。
template<class T>
__global__ void kernel(T *t1,T *t2)
{
int tid=threadIdx.x;
extern __shared__ T array1[];
extern __shared__ T array2[];
array1[tid]=t1[tid];//copy (1)
array2[tid]=t2[tid];//copy (2)
__syncthreads();
}
事实证明array1[tid]=array2[tid]=t2[tid]。 交换copy(1)和copy(2)的位置时,结果为array1[tid]=array2[tid]=t1[tid]。 只有当我删除“extern”时,结果才是我想要的(array1 [tid] = t1 [tid],array2 [tid] = t2 [tid])。 谁能解释一下为什么?
【问题讨论】:
标签: cuda thread-synchronization