我试图在我的设备中创建颜色对象。下面是我的简化版本:
在***颜色.hpp***中:
class Color {
public:
Color(){}
float r, g, b;
// other functions
}
在***测试中,cu***:
__global__ void runCuda(){
Color c = Color();
}
int main() {
runCuda<<<1,1>>>()
}
这给了我一个错误
不允许从global函数调用host函数
这样就可以了,我只需要在Color(){}函数前面添加__host__和__device__。
但是,我得到了以下错误:
host不命名类型
据我所知,这是因为我没有用nvcc编译它,问题是我用CMake来构建我的项目,我不太清楚它是如何做的,但它似乎是用c++编译器编译.cpp文件,用nvcc编译器编译.cu文件。
但是在我的设备中,我想创建Color对象。有没有办法在我的CMakefile或代码中修复这个问题?或者我需要为我所有现有的类创建一个cuda版本?
2条答案
按热度按时间lyr7nygr1#
类似这样的方法应该可以奏效:
当你的hpp文件包含在.cu文件中时,
__CUDACC__
宏将被定义;当它包含在.cpp文件中时(nvcc将其转交给主机编译器),宏将不会被定义。dgiusagp2#
您也可以尝试类似下面的方法。
使用这种方法,你将不需要修改你的代码。我不确定这是否合适,但它似乎适用于我的项目。你可能应该在包含CUDA头文件 * 之后 * 包含这些定义。