при загрузке массивов из глобальной памяти в общую память переменные в общей памяти не делают то, что я хочу.Как загрузить значения во внешний общий массив
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]. при замене места копирования (1) и копирования (2), результатом является array1 [tid] = array2 [tid] = t1 [tid]. только когда я удаляю «extern», результат получается тем, что я хочу (array1 [tid] = t1 [tid], array2 [tid] = t2 [tid]). Может ли кто-нибудь объяснить, почему?
Возможно ли, что как «статические __shared__» и «ехЬегп __shared__» существует в том же ядре, например: «__shared__ float array1 [N]» и «extern __shared__ T array2 []»? – fireplay
Я считаю, что вы должны иметь возможность использовать как статические, так и динамические распределения в одном ядре, вы попробовали? –
Да, я получил его, спасибо большое. – fireplay