初学cuda,需要传递包含指针的结构体至核函数,但结构体的指针成员拷贝至显存总是无法成功。废话不多说,测试代码如下。望解答。 代码中第三步最后的拷贝,packet_dev的指针成员总是为空。。。为什么呢!? 对了,系统是linux64位。
strcut PKT
{
char *a;
char *b;
};
int main()
{
/* 第一步,初始化host变量 */
struct PKT packet;
packet.a = (char *)malloc(10);
memset(packet.a,‘a’,9);
packet.b = (char *)malloc(10);
memset(packet.b,‘b’,9);
/* 第二步,设置中间变量 */
struct PKT packet_t;
cudaMalloc((void **)&packet_t.a,10);
cudaMalloc((void **)&packet_t.b,10);
cudaMemcpy(packet_t.a,packet.a,10,cudaMemcpyHostToDevice);
cudaMemcpy(packet_t.b,packet.b,10,cudaMemcpyHostToDevice);
/* 第三步,申请device空间,拷贝host数据至device */
struct PKT *packet_dev;
cudaMalloc((void **)&packet_dev,sizeof(struct PKT));
cudaMemcpy(packet_dev,&packet_t,sizeof(struct PKT),cudaMemcpyHostToDevice);
return 0;
}