我正在尝试在我的设备中创建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版本?
这样的事情应该有效:
#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移交给主机编译器)时,将不会定义宏.
归档时间: |
|
查看次数: |
2297 次 |
最近记录: |