c++ - 如何在结构中的指针上使用 cudaMalloc?

标签 c++ c pointers struct cuda

我希望在 CUDA5.0 中将内容从主机复制到设备更加方便。所以我想创建一个以主 vector 作为参数并返回如下结构的函数:

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++ - 如何在结构中的指针上使用 cudaMalloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28115782/

相关文章:

c++ - AutoIt中调用DLL函数,DLLStruct没有数据

c - 无法在 Mac OS X 上使用 C + libusb 声明 USB 接口(interface)

c - 如何检查指针是否在分配的内存中写入?

c++ - CreateProcess后如何实时获取内存?

使用 g++ 支持 C++0x IDE

c - 从 C 函数中的数组返回一个项目

C++:使用析构函数删除指针静态 vector 中的对象?

c++ - 指针赋值与指针运算

c++ - 是否可以使用 const_cast 覆盖我的 const C++ 成员函数,返回一个指向内部非常量数组的 const 指针?

c - 关于如何使用 C 以特定方式反转文本文件顺序的建议