将C++对象传递给 CUDA 内核

passing C++ objects to CUDA kernel

本文关键字:CUDA 内核 C++ 对象      更新时间:2023-10-16

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

推力。

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

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

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

至于你的具体问题:

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