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

标签 c++ cuda

“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和 cuda runtime API可以使用标准的 C++ 编译器从普通主机代码调用和链接。然而,这并没有解决如何处理设备代码的问题。如果设备代码在 PTX form 中交付使用驱动程序 API(不包括 kernel<<<...>>> 等语法元素),则不需要 nvcc,并且可以使用标准编译器(例如 g++)完全构建应用程序。

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

  4. 将来,您可能还想关注 CUDA runtime compilation mechanism 不断发展的功能.

  5. 既然你提到了 gcc,你可能还想关注一下 OpenACC support in gcc 不断发展的能力。 .

关于c++ - CUDA 是否包含真正的 C++ 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784698/

相关文章:

c++ - 输出的 GiNaC 顺序

c++ - 作为函数参数传递的数组的大小

c++ - 将全局复制到共享内存的最佳方法

cuda - 用于生成最佳代码的 NVCC 编译选项(使用 JIT)

c - 如何有效地将大数组加载到GPU共享内存?

c++ - Visual Studio 2008 错误? "LNK1104 : cannot open file "

c++ - 错误, “include/Trading_GenericTemplate.h:37: error: expected constructor, destructor, or type conversion before â=â token”

c++ - block 的某些线程到达 __syncthreads() 而其中一些不到达是否重要?

c++ - 在 CUDA 中增加每个线程的工作量的示例

c++ - 计算两个已知大小和位置的物体之间的碰撞