我知道这个问题可能已经被问过,但我找不到专门回答我的问题的答案,所以这里是......
问题非常简单,我正在尝试对 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__
函数的类成员函数(尝试一下)。即使可以,在设备上运行的此类函数也不具有对其他类数据或函数成员的通常类访问权限。因此,通常的建议是在类的范围之外声明内核定义,并在调用内核的类中拥有一个包装成员函数。
关于c++ - 对 CUDA 代码使用 C++ header 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37038317/