“CUDA c++”语言是一种c++派生语言,但不受标准编译器支持,但可以通过nVidia的nvcc编译器编译。这会导致多语言项目,其 GPU 模块使用 nvcc 编译,非 GPU 模块使用 gcc 编译。
例如语法kernel<<<dims>>>(params)
不是 c++ 的一部分。
nVidia 是否包含一个 GPU 库(作为 CUDA 的一部分)实际上可以与标准 c++ 编译器(如 gcc)一起使用?
最佳答案
CUDA GPU 需要为 GPU 编译设备代码,这与您在为 x86 目标编译的典型库中找到的 x86 机器代码不同。
因此,要使用 GPU,您将需要 nvidia 编译器以某种方式生成机器代码。
有多种方法可以实现这一点:
使用图书馆。 CUDA 随附的库(例如 CUBLAS、CUSPARSE、CUSOLVER 和 CUFFT)包括可从普通主机代码调用和链接的预编译 GPU 例程。这些库都可以与标准的 c++ 编译器(例如 g++)一起使用。
大部分例程来自cuda driver API和 cuda runtime API可以使用标准的 C++ 编译器从普通主机代码调用和链接。然而,这并没有解决如何处理设备代码的问题。如果设备代码在 PTX form 中交付使用驱动程序 API(不包括
kernel<<<...>>>
等语法元素),则不需要 nvcc,并且可以使用标准编译器(例如 g++)完全构建应用程序。如果设备代码以 C/C++ 源代码形式(即 CUDA C/C++)交付,那么通常需要 nvcc 将代码转换为 PTX(以便可以使用上面的方法 2)或直接转换为二进制编译格式,可供驱动程序 API 或运行时 API 使用。
将来,您可能还想关注 CUDA runtime compilation mechanism 不断发展的功能.
既然你提到了 gcc,你可能还想关注一下 OpenACC support in gcc 不断发展的能力。 .
关于c++ - CUDA 是否包含真正的 C++ 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784698/