我正在处理一个结构数组,每个cuda块将使用一个结构(并且只有一个)的数据并围绕它进行大量计算。为了让程序工作,我想在共享内存中加载结构。
我尝试使用memcpy函数:
struct LABEL_2D{
int a;
float * b[MAX];
};
__shared__ struct LABEL_2D self_label;
if(threadIdx.x == 0){
memcpy(&self_label,
label+(blockIdx.x*sizeof(struct LABEL_2D)),
sizeof(struct LABEL_2D));
}
__syncthreads();
但是在执行时我收到以下错误:未指定的启动失败cudaGetLastError()
我想知道是否可以在共享内存中加载结构。
答案 0 :(得分:1)
您不应该使用memcpy()复制数据。
您可以像您一样分配第一个线程,只需初始化共享内存变量:
struct LABEL_2D{
int a;
float * b[MAX];
};
__shared__ LABEL_2D self_label;
if(threadIdx.x == 0){
slef_label = label[blockIdx.x];
}
__syncthreads();
编辑:删除了其他解决方法,因为它们实际上没用。