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 编译器来生成机器代码。
有多种方法可以实现:
使用图书馆。 CUDA 随附的库(例如 CUBLAS、CUSPARSE、CUSOLVER 和 CUFFT)包括可从普通主机代码调用和链接的预编译 GPU 例程。这些库都可以与标准的 c++ 编译器一起使用,例如 g++。
来自 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++)完全构建应用程序。
如果设备代码以 C/C++ 源格式(即 CUDA C/C++)交付,那么通常需要 nvcc 将代码转换为 PTX (以便可以使用上面的方法 2)或直接转换为二进制编译格式,驱动程序 API 或运行时 API.
[=36= 可以使用该格式]
将来,您可能还想关注 CUDA runtime compilation mechanism 的不断发展的功能。
既然你提到了gcc,你可能还想关注一下OpenACC support in gcc.
不断发展的能力
"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 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++)完全构建应用程序。如果设备代码以 C/C++ 源格式(即 CUDA C/C++)交付,那么通常需要 nvcc 将代码转换为 PTX (以便可以使用上面的方法 2)或直接转换为二进制编译格式,驱动程序 API 或运行时 API.
[=36= 可以使用该格式]将来,您可能还想关注 CUDA runtime compilation mechanism 的不断发展的功能。
既然你提到了gcc,你可能还想关注一下OpenACC support in gcc.
不断发展的能力