【问题标题】:Passing a list of vector pointers in cuda在 cuda 中传递向量指针列表
【发布时间】:2014-04-27 21:14:04
【问题描述】:

我是 CUDA 编程的新手,所以我很好奇如何执行以下操作:

根据这里的问题:Using std::vector in cuda device code

我们不能使用 std::vector。我正在尝试将 std::vector 之类的参数传递给内核。 void * 描述了 GPU/设备上的内存指针(cuda 术语)。

最好的方法是什么?也许void **?这行得通吗?

【问题讨论】:

  • 不,我只是想更具体地说明我要解决的问题,以便了解哪种方式最适合输入 void 指针数组。

标签: c++ vector cuda void-pointers


【解决方案1】:

那篇文章似乎很清楚,但我会重复一遍:你不能将 std::vector 传递给 CUDA 内核,原因如下:

  • CUDA 内核需要使用设备代码,即在您的 gpu 上运行的代码或可以这样翻译的代码。为了生成该代码,您编写的几乎所有内容都需要通过编译链,该编译链最终会为您的 gpu 生成中间代码或可执行代码。

  • 通过使用 STL 构造和算法,您使用的代码不是为 GPU 编写的,并且没有设备等效代码或仿真速度慢/甚至不总是可能的 .

【讨论】:

  • 我完全理解 std 在主机上运行。我的问题是输入 void 指针数组/向量的最佳方式是什么
  • 取决于你需要做什么,一个指向指针数组的指针可能是一个不错的选择(确保也传递数组的大小)或者你可以使用推力:docs.nvidia.com/cuda/thrust/#vectors请记住,您实际上并没有使用“在主机上运行的代码”,该代码也可能是源代码级的,但需要其他未移植到设备的组件,或者只是不受支持的代码
  • 所以当您说数组时,您的意思是 void ** 指向 void 指针的指针?
  • 是的,一个指向 void 指针数组的指针。由于一个数组衰减(它的功能已经衰减)为一个指针,我们谈论的是同一件事。
猜你喜欢
  • 2022-01-12
  • 2011-04-20
  • 2013-04-20
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2011-07-18
  • 1970-01-01
相关资源
最近更新 更多