1

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

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

4

1 回答 1

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

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

于 2013-03-18T16:35:54.570 回答