繁体   English   中英

如何在CUDA中为我的指针数组分配设备内存?

[英]How do I allocate device memory to my array of pointers, in CUDA?

我的主机上有以下数据结构:

typedef struct point{
   int x;
   int y;
}Point;

 typedef struct pair{
     Point i;
     Point j;
     float cost;
 }Pair;

Pair* pairs[n];   // allocates an array of pointers to pair

现在,我要将“对”复制到GPU。 所以,我声明了以下指针:

Pair **d_pair;

并使用以下内容分配内存:

cudaMalloc((void**)d_pair,(sizeof(Pair)+sizeof(Pair*))*n);

现在,我从主机复制到设备:

cudaMempy(d_pair,pair,(sizeof(Pair)+sizeof(Pair*))*n),cudaMemcpyHostToDevice);

内核原型接收d_pair为:

__global__ my_kernel(Pair* d_pair[], ... ){ 
...
}

上述声明序列是否应按预期工作? 如果没有,我做了哪些修改? 基本上,我想复制Pair *对[n]; 就像“d_pair”一样。 我该怎么做呢?

它不起作用:您发送的是指针数组,但不是对象本身。 你需要一个Pair的数组(或Vector):

Pair pairs[n]; 

接着 :

Pair *d_pair;
cudaMalloc((void**)&d_pair,sizeof(Pair)*n);
cudaMempy(d_pair,pairs,sizeof(Pair)*n,cudaMemcpyHostToDevice);

顺便说一下,这个:

cudaMempy(d_pair,pair,(sizeof(Pair)+sizeof(Pair*))*n),cudaMemcpyHostToDevice);

没有意义,你为指针和一对分配空间。 您的副本使用相同的(sizeof(Pair)+ sizeof(Pair *))* n)表达式,但数组对是(n * sizeof(Pair *)),因此您正在复制未定义的内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM