在gpu共享内存中加载结构

时间:2013-03-18 16:09:35

标签: cuda shared-memory

我正在处理一个结构数组,每个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()

我想知道是否可以在共享内存中加载结构。

1 个答案:

答案 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();

编辑:删除了其他解决方法,因为它们实际上没用。