1

我有一段代码,其中包含我无权修改的对象。另一方面,我必须编写 CUDA 内核来进行一些计算。目前,我正在将所需信息转换为数组或结构并传递它。是否可以将这样的对象传递给 CUDA 内核,并且 CUDA 内核有什么方法可以访问该类的私有成员。也有人向我建议推力。

4

1 回答 1

4

您可以在 CUDA 代码中使用 c++ 功能。它有一些额外的要求。例如,内核函数不能让我成为班级成员。对于使用您拥有的数据结构,它需要满足一些要求。

  • 您需要在设备代码中使用的成员应注释为__device__
  • 您需要实现__device__构造函数。
  • 如果您的结构封装了指针,则需要在设备内存中分配。
  • 您可以使用模板,但不能使用具有虚函数的类。

您可以在编程指南附录 D. C/C++ 语言支持中看到一些 c++ 数据结构的示例。

至于你的具体问题:

  1. 是的,您可以在内核中传递对象。您需要__device__为它实现复制构造函数。
  2. 您可以在类方法中访问私有成员。您应该实现__device__访问器方法以在类外使用它。但是您不能通过内核调用传递具有私有成员的类。
于 2012-06-24T20:45:41.757 回答