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++ - 二进制表达式的无效操作数

c++ - inputMask用空格填充QLineEdit

在我自己的 shell 中创建后台进程

c++ - 为什么在声明对象数组时不能使用->运算符?

c# - 如何将 c++(例如:IList Ptr)指针转换为 std::list?

c++ - CGAL - 制作时时钟摆动?

c# - 是否可以创建一个应用程序来检查 Windows 上每个打开的文件?

具有 sizeof (int) == 1 "fully conform"的实现可以吗?

c - C指针指向数组/指针数组的歧义消除

C - 用户输入最多 8 个字符