如何在cpp和cuda模块中使用cuda类头文件

Mon*_*all 2 c++ cuda

我正在尝试在我的设备中创建Color对象.这是我所拥有的简化版本:

Color.hpp中:

class Color { 
public:
    Color(){}
    float r, g, b;
    // other functions
}
Run Code Online (Sandbox Code Playgroud)

test.cu中:

__global__ void runCuda(){
    Color c = Color();
}

int main() {
   runCuda<<<1,1>>>()
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误的说法

不允许从全局函数调用主机函数

所以这很好.我只需要在Color(){}函数前面添加__host__和__device__.

但后来我收到以下错误:

主机没有命名类型

所以根据我的理解,这种情况正在发生,因为我没有用nvcc编译它.问题是我正在使用CMake来构建我的项目.我不太清楚它是如何做到的,但它似乎是用c ++编译器和.cu用nvcc编译器编译.cpp文件.

但在我的设备中,我想创建Color对象.有没有办法在我的CMakefiles或我的代码中解决这个问题?或者我是否需要为所有现有课程创建cuda版本?

Rob*_*lla 6

这样的事情应该有效:

#ifdef __CUDACC__
#define CUDA_HOSTDEV __host__ __device__
#else
#define CUDA_HOSTDEV
#endif

class Color { 
public:
    CUDA_HOSTDEV Color(){}
    float r, g, b;
    // other functions
};
Run Code Online (Sandbox Code Playgroud)

当您的hpp文件包含在.cu文件中时,将定义__CUDACC__ .当它包含在.cpp文件中(nvcc移交给主机编译器)时,将不会定义宏.