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

时间:2013-11-16 16:46:47

标签: cuda

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

1 个答案:

答案 0 :(得分:5)

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

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

  1. 类实例中设备代码将取消引用的任何指针必须是有效的设备指针
  2. 设备代码将调用的类中的任何成员函数必须是有效的__device__函数
  3. 传递包含虚函数的类或从虚拟基类派生的类作为内核参数
  4. 是非法的
  5. 设备代码不支持访问命名空间匿名联合的类
  6. CUDA内核代码中C ++支持的所有特性和限制在CUDA Programming Guide中描述,其副本随CUDA工具包的每个版本一起提供。您需要做的就是阅读它。