使用C ++代码的C ++头结构

时间:2016-05-04 21:26:01

标签: c++ c cuda gpgpu

我知道这个问题可能已被提出,但我无法找到一个特别回答我的问题的答案,所以这里就是......

问题很简单,我正在尝试为CUDA(.cu / .cuh)代码使用C ++样式头。

//MyClass.cuh
#ifndef MY_CLASS
#define MY_CLASS
#include ...cuda.h, etc.
class MyClass
{
   public:
      void myFunction();   
   private:
      __global__ void myKernel();
}
#endif

//MyClass.cu
#include "MyClass.cuh"
void MyClass::myFunction()
{
   //myFunction definition...
}

__global__ void MyClass::myKernel()
{
   //myKernel definition...
}

这会有用吗?

1 个答案:

答案 0 :(得分:1)

不,这不起作用:

class MyClass
{
    ...
      __global__ void myKernel();

编译器不允许您定义一个__global__函数的类成员函数(试一试)。即使你可以,在设备上运行的这样的函数也不会具有对其他类数据或函数成员的通常类访问。所以通常的建议是在类的范围之外声明你的内核定义,并在调用内核的类中有一个包装器成员函数。

其他一些讨论是herehere