将C++对象传递给 CUDA 内核
passing C++ objects to CUDA kernel
我有一段代码,它由我没有修改权限的对象组成。另一方面,我必须编写 CUDA 内核来进行一些计算。目前,我正在将所需的信息转换为数组或结构并传递它。是否可以将这样的对象传递给 CUDA 内核,以及 CUDA 内核是否有任何方法可以访问类的私有成员。也有人向我建议
您可以在 CUDA 代码中使用 c++ 功能。它有一些额外的要求。例如,内核函数不能成为类的成员。对于使用,您拥有的数据结构需要满足一些要求。
- 需要在设备代码中使用的成员应批注为
__device__
- 您需要实现
__device__
构造函数。 - 如果您的结构封装指针,则需要在设备内存中分配。
- 您可以使用模板,但不能将类与虚拟函数一起使用。
您可以在编程指南附录 D. C/C++ 语言支持中看到 C++ 数据结构的一些示例。
至于你的具体问题:
- 是的,您可以在内核中传递对象。您需要为它实现
__device__
复制构造函数。 - 可以在类方法中访问私有成员。您应该实现
__device__
访问器方法以在类外使用它。 但是您不能通过内核调用传递带有私有成员的类。
相关文章:
- CUDA内核和数学函数的显式命名空间
- 将 2D 推力::d evice_vector 复矩阵传递给 CUDA 内核函数
- 如何将矢量的数据传递给 CUDA 内核?
- 无法在 cuda 内核中使用我的模板类
- CUDA内核printf()在终端中不产生输出,在探查器中工作
- 编译为 cuda 内核调用提供了"expression must have integral or unscoped enum type"
- 使用模板模式优化 CUDA 内核
- 带有大结构变量的 CUDA 内核函数给出了错误的结果
- CUDA 内核在第二次运行时运行得更快 - 为什么?
- 在CUDA内核中传递一个常数整数
- 如何将函数作为CUDA内核参数传递
- 验证调用 cuda 内核的次数
- cuda 内核调用/传递参数中的编译错误
- 预期;在 CUDA 内核上
- CUDA 内核"Only a single pack parameter is allowed"解决方法?
- 降低CUDA内核运行时:内核中矩阵的动态内存分配
- 如何在多个 GPU 上同时执行 cufftXt 和 CUDA 内核
- 执行 CUDA 内核时黑屏C++输出正确的结果
- CUDA 内核中的竞争条件
- 优化三角矩阵计算的 CUDA 内核执行