在gpu上使用结构体的问题
大家好,我在host上定义了一个结构体,然后将一个结构体变量拷贝到device上,但是输出结构显示拷贝没有成功,具体的代码片段如下:
#define MAX_SUB_NUM 32
typedef struct
{
short int haplo[MAX_SUB_NUM];
double prob;
int cur;
}STRUCT;
STRUCT obj1,obj2;//定义host上的结构体变量
__device__ STRUCT dobj;//定义device上的结构体变量
void print_struct(STRUCT *b)
{
int i;
for(i=0;i<MAX_SUB_NUM;i++)
printf("%d ",b->haplo[i]);
printf("\n");
printf("%f\n",b->prob);
printf("%d\n",b->cur);
}
int main()
{
int i;
for(i=0;i<MAX_SUB_NUM;i++)//初始化host上的结构体变量obj1
obj1.haplo[i]=i;
obj1.prob=0.8;
obj1.cur=123;
size_t memsize=sizeof(obj1);
cudaMemcpy(&dobj,&obj1,memsize,cudaMemcpyHostToDevice);//将obj1拷贝到设备上
cudaMemcpy(&obj2,&dobj,memsize,cudaMemcpyDeviceToHost);//将dobj拷贝到主机上
print_struct(&obj);//打印,检验拷贝是否成功
}
但是打印的结果全是0,也就是说从host到device的拷贝没成功。我想到了结构体的内存对齐问题,尝试了显示的进行对齐,如:typedef struct __align__(16) ,但还是不行,请大家帮忙看看,怎么才能拷贝成功。