C++ cuda-nvcc如何编译主机代码?

C++ cuda-nvcc如何编译主机代码?,c++,cuda,C++,Cuda,我尝试将我的C++项目转换为CUDA代码,运行在GPU上。 我是cuda编程新手,不知道如何应对这种情况: 如果我有一个非常复杂的类定义,现在我想将一个类实例传递给设备并在设备上执行它的一些成员函数,那么我应该重写整个.cpp文件。我是否只需要将设备上运行的那些函数转到\uuuuuu主机\uuuuuuuuuu设备\uuuuuuu,还是应该重写所有函数 我认为,nvcc将没有函数类型限定符的函数视为\uuuuuuu主机。它如何编译宿主代码?它是否像g++那样编译它们 如果我有一个非常复杂的类定义,

我尝试将我的C++项目转换为CUDA代码,运行在GPU上。 我是cuda编程新手,不知道如何应对这种情况:

如果我有一个非常复杂的类定义,现在我想将一个类实例传递给设备并在设备上执行它的一些成员函数,那么我应该重写整个
.cpp
文件。我是否只需要将设备上运行的那些函数转到
\uuuuuu主机\uuuuuuuuuu设备\uuuuuuu
,还是应该重写所有函数

我认为,
nvcc
将没有函数类型限定符的函数视为
\uuuuuuu主机
。它如何编译宿主代码?它是否像
g++
那样编译它们

如果我有一个非常复杂的类定义,现在我想通过 类实例,并执行其某些成员函数 在设备上,我应该重写整个.cpp文件。我只是 需要将设备上运行的功能转到
\uuuuuuu主机\uuuuuuuu设备\uuuuuuu
或 我应该重写所有的函数吗

这完全取决于您的代码。CUDA支持C++语言特征的有限子集(完全文档化),几乎没有支持C++标准库。因此,没有一般的答案,但如果您希望在GPU上调用类成员函数代码,则可能需要重写至少一些类成员函数代码

我认为nvcc将没有函数类型限定符的函数视为
\uuuuuuuuu主机
。它如何编译宿主代码?它是否像g++那样编译它们

首先要了解的是,nvcc不是一个编译器,它是一个编译器驱动程序。默认情况下,没有.Cu文件扩展名的文件中的纯C++代码直接用一组预定义的编译器选项直接传递给主机编译器。 扩展名文件中的宿主代码由CUDA C++前端解析,以查找CUDA语法,然后传递给主机编译器。在极其复杂的模板定义和前沿语言功能上,此过程可能会失败。nvcc还自动包含CUDA头,这些头可能与您自己代码的内容发生冲突。但最终宿主代码还是通过不同的路径到达主机C++编译器。 如果我有一个非常复杂的类定义,现在我想通过 类实例,并执行其某些成员函数 在设备上,我应该重写整个.cpp文件。我只是 需要将设备上运行的功能转到
\uuuuuuu主机\uuuuuuuu设备\uuuuuuu
或 我应该重写所有的函数吗

这完全取决于您的代码。CUDA支持C++语言特征的有限子集(完全文档化),几乎没有支持C++标准库。因此,没有一般的答案,但如果您希望在GPU上调用类成员函数代码,则可能需要重写至少一些类成员函数代码

我认为nvcc将没有函数类型限定符的函数视为
\uuuuuuuuu主机
。它如何编译宿主代码?它是否像g++那样编译它们

首先要了解的是,nvcc不是一个编译器,它是一个编译器驱动程序。默认情况下,没有.Cu文件扩展名的文件中的纯C++代码直接用一组预定义的编译器选项直接传递给主机编译器。 扩展名文件中的宿主代码由CUDA C++前端解析,以查找CUDA语法,然后传递给主机编译器。在极其复杂的模板定义和前沿语言功能上,此过程可能会失败。nvcc还自动包含CUDA头,这些头可能与您自己代码的内容发生冲突。但最终宿主代码还是通过不同的路径到达主机C++编译器。