CUDA 是否包含真正的 C++ 库?

Does CUDA include a real c++ library?

"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 编译器来生成机器代码。

有多种方法可以实现:

  1. 使用图书馆。 CUDA 随附的库(例如 CUBLAS、CUSPARSE、CUSOLVER 和 CUFFT)包括可从普通主机代码调用和链接的预编译 GPU 例程。这些库都可以与标准的 c++ 编译器一起使用,例如 g++。

  2. 来自 cuda driver API and cuda runtime API are callable and linkable from ordinary host code, using a standard c++ compiler. However this doesn't address the question of what to do with device code. If device code is delivered in PTX form 的大多数例程使用驱动程序 API(不包括像 kernel<<<...>>> 这样的语法元素),那么不需要 nvcc,并且可以使用标准编译器(例如 g++)完全构建应用程序。

  3. 如果设备代码以 C/C++ 源格式(即 CUDA C/C++)交付,那么通常需要 nvcc 将代码转换为 PTX (以便可以使用上面的方法 2)或直接转换为二进制编译格式,驱动程序 API 或运行时 API.

    [=36= 可以使用该格式]
  4. 将来,您可能还想关注 CUDA runtime compilation mechanism 的不断发展的功能。

  5. 既然你提到了gcc,你可能还想关注一下OpenACC support in gcc.

  6. 不断发展的能力