在CUDA中将非POD类型作为__global__函数参数传递

B.J*_*.A. 1 cuda

我知道非POD类型通常不能作为参数传递给CUDA内核启动.但是我可以在这里找到解释,我的意思是像书,CUDA手册等可靠来源.

tal*_*ies 5

这个问题的整个前提是不正确的.CUDA内核参数不限于POD类型.

您可以通过引用或值将任何完整类型作为参数传递.根据您编译的体系结构,参数列表的总大小限制为255个字节或4kb,但这是对内核参数的唯一限制.将类的实例传递给CUDA内核时,必须遵循许多简单的限制,包括:

  1. 类设备中取消引用的类实例中的任何指针都必须是有效的设备指针
  2. 类中设备代码将调用的任何成员函数必须是有效__device__函数
  3. 传递包含虚函数的类或从虚拟基类派生的类作为内核参数是非法的
  4. 设备代码中不支持访问命名空间匿名联合的类

CUDA编程指南中描述了CUDA内核代码中C++支持的所有特性和限制,CUDA编程指南的副本在每个版本的CUDA工具包中都有.你需要做的就是阅读它.