怎么在CPU中传递指向显存的指针

lixingjian4 2009-10-20 10:00:38
我有个类:class image,image类中有个成员变量float *data,其他成员与此问题无关。
程序分配了一个image类型的数组im,长度为n。并为每个im[i].data用cudaMalloc和cudaMemcpy分配空间和初始化。

现在我要增加一个kernel,需要在其中访问到任意im[i]中的data,那么就需要把所有的im[i].data作为参数传到kernel中,但由于n不确定,所以这无法实现。

我想定义一个指针数组float **pdata,其中的pdata[i]存放im[i].data在显存中的地址,这样可以在我的新kernel中用pdata[i][j]访问到任意需要的数据,这样的操作能够在CPU中实现吗?
...全文
207 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
旗戈 2009-10-21
  • 打赏
  • 举报
回复
kernel函数是运行在GPU上面的函数阿,且只能访问显存中的数据吧。如果想访问image数组的数据,关键还是要把数据传到GPU上面。
  • 打赏
  • 举报
回复
[Quote=引用楼主 lixingjian4 的回复:]
我有个类:class image,image类中有个成员变量float *data,其他成员与此问题无关。
程序分配了一个image类型的数组im,长度为n。并为每个im[i].data用cudaMalloc和cudaMemcpy分配空间和初始化。

现在我要增加一个kernel,需要在其中访问到任意im[i]中的data,那么就需要把所有的im[i].data作为参数传到kernel中,但由于n不确定,所以这无法实现。

我想定义一个指针数组float **pdata,其中的pdata[i]存放im[i].data在显存中的地址,这样可以在我的新kernel中用pdata[i][j]访问到任意需要的数据,这样的操作能够在CPU中实现吗?
[/Quote]

不能.空间地址不一样.一个是主存,一个是显存.
n不确定可在gmem上申请一最大的空间,然后用cudamemcopy复制到gmem中.
  • 打赏
  • 举报
回复
[Quote=引用楼主 lixingjian4 的回复:]
我有个类:class image,image类中有个成员变量float *data,其他成员与此问题无关。
程序分配了一个image类型的数组im,长度为n。并为每个im[i].data用cudaMalloc和cudaMemcpy分配空间和初始化。

现在我要增加一个kernel,需要在其中访问到任意im[i]中的data,那么就需要把所有的im[i].data作为参数传到kernel中,但由于n不确定,所以这无法实现。

我想定义一个指针数组float **pdata,其中的pdata[i]存放im[i].data在显存中的地址,这样可以在我的新kernel中用pdata[i][j]访问到任意需要的数据,这样的操作能够在CPU中实现吗?
[/Quote]

不能.空间地址不一样.一个是主存,一个是显存.
n不确定可在gmem上申请一最大的空间,然后用cudamemcopy复制到gmem中.

581

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧