c++ - 对 CUDA 代码使用 C++ header 结构

标签 c++ c cuda gpgpu

我知道这个问题可能已经被问过,但我找不到专门回答我的问题的答案,所以这里是......

问题非常简单,我正在尝试对 CUDA (.cu/.cuh) 代码使用 C++ 样式 header 。

//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...
}

这行得通吗?

最佳答案

不,这行不通:

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

编译器不会让您定义一个属于 __global__ 函数的类成员函数(尝试一下)。即使可以,在设备上运行的此类函数也不具有对其他类数据或函数成员的通常类访问权限。因此,通常的建议是在类的范围之外声明内核定义,并在调用内核的类中拥有一个包装成员函数。

一些额外的讨论是 herehere

关于c++ - 对 CUDA 代码使用 C++ header 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37038317/

相关文章:

c - 使符号链接(symbolic link)到可执行文件

c - 0xfbad8001 回溯中的魔数(Magic Number)

python - 在 Python 的 Cython 方法中传递整数列表的 numpy 数组

c - 使用 CUDA 减少矩阵行

在 Linux 上将 CUDA 代码编译为静态库 (.a)

c++ - pow(NAN) 非常慢

c++ - 手动注册 OCX 文件

cuda - 实际的扭曲执行是顺序执行还是并行执行?

c++ - 如何反转程序的输出?

c++ - 易于使用 PNG 库?