【发布时间】:2015-03-22 20:08:16
【问题描述】:
我想让在 CUDA5.0 中将内容从主机复制到设备更方便。所以我想创建一个以宿主向量作为参数并返回如下结构的函数:
template <typename T>
struct devArr
{
unsigned int size; //array size
T *address; //address on device
};
目的是将数据复制到代码中的任何位置,然后只将该结构传递给使用数据的任何设备函数,而不必单独处理数组边界。
返回结构的函数可能如下所示:
template <typename T>
struct cudaArr<T> VectorToDevice(vector<T> arr)
{
struct devArr<T> darr;
darr.size = arr.size();
cudaMalloc((void**)&darr.address, arr.size()*sizeof(T));
cudaMemcpy(darr.address,&arr[0], arr.size()*sizeof(T), cudaMemcpyHostToDevice);
return darr;
}
所以所有这些都编译得很好。但是使用这段代码,我的结构中的指针没有指向正确的地址。一般来说,它必须是如何处理结构中的指针的问题。那么如何正确使用 cudaMalloc 和结构中的指针呢?
谢谢。
【问题讨论】:
标签: c++ c pointers struct cuda