我有一段代码,其中包含我无权修改的对象。另一方面,我必须编写 CUDA 内核来进行一些计算。目前,我正在将所需信息转换为数组或结构并传递它。是否可以将这样的对象传递给 CUDA 内核,并且 CUDA 内核有什么方法可以访问该类的私有成员。也有人向我建议推力。
问问题
4895 次
1 回答
4
您可以在 CUDA 代码中使用 c++ 功能。它有一些额外的要求。例如,内核函数不能让我成为班级成员。对于使用您拥有的数据结构,它需要满足一些要求。
- 您需要在设备代码中使用的成员应注释为
__device__
- 您需要实现
__device__
构造函数。 - 如果您的结构封装了指针,则需要在设备内存中分配。
- 您可以使用模板,但不能使用具有虚函数的类。
您可以在编程指南附录 D. C/C++ 语言支持中看到一些 c++ 数据结构的示例。
至于你的具体问题:
- 是的,您可以在内核中传递对象。您需要
__device__
为它实现复制构造函数。 - 您可以在类方法中访问私有成员。您应该实现
__device__
访问器方法以在类外使用它。但是您不能通过内核调用传递具有私有成员的类。
于 2012-06-24T20:45:41.757 回答