我如何将设备内存分配给我在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 as:
__global__ my_kernel(Pair* d_pair[], ... ){
...
}
上述语句序列是否应按预期工作?如果没有,我进行了什么修改?基本上,我想复制对* Pairs [n];因此," d_pair"。我该怎么做?
它行不通:您正在发送一系列指针,而不是对象本身。您需要具有对的数组(或向量):
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*)),因此您要复制不确定的内存。
相关文章:
- CUDA:统一内存和指针地址的更改
- 如何在 cuda 中将结构的指针变量从主机复制到设备
- 从CUDA中的指针加载图像并导出dll
- CUDA设备指针丢失
- 我如何将设备内存分配给我在CUDA中的指针
- 功能指针(到其他内核)作为CUDA中的内核Arg
- cuda推力:检查空指针
- CUDA中设备函数指针的分配(来自主机函数指针)
- 结构中的 CUDA 设备功能指针,没有静态指针或符号副本
- 设备类中的设备指针(Cuda C++)
- 指向 CUDA 中共享内存的本地指针
- CUDA 内存管理/类问题中的指针
- 在 CUDA 中使用指针复制类
- CUDA内核,带有函数指针和可变模板
- 可以使用Cuda设备指针来代替cl::Buffer
- CUDA中的函数指针出现故障
- 如何分配指针数组并为cuda中的多个内核调用保留它们
- CUDA在使用函数指针时启动主机函数作为内核
- Cuda推力::device_vector从特定范围获取指针
- 通过引用CUDA指针实现CUDA矩阵反转