gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:20 29 4
gpt4 key购买 nike

我想让在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com