【问题标题】:Does CUDA include a real c++ library?CUDA 是否包含真正的 c++ 库?
【发布时间】:2015-06-11 15:10:15
【问题描述】:

“CUDA c++”语言是 c++ 派生语言,但不受标准编译器支持,但可以通过 nVidia 的 nvcc 编译器进行编译。这会导致多语言项目,它们的 GPU 模块使用 nvcc 编译,非 GPU 模块使用 gcc 编译。

例如,kernel<<<dims>>>(params) 语法不是 c++ 的一部分。

nVidia 是否包含一个 GPU 库(作为 CUDA 的一部分),它实际上可以与 gcc 等标准 c++ 编译器一起使用?

【问题讨论】:

  • CUDA 驱动程序 API 可以满足您(我认为)的要求。驱动 API 代码完全不需要 nvcc 来构建,内核可以由驱动在运行时进行 JIT 编译(尽管仅当内核使用 PTX 编写时)

标签: c++ cuda


【解决方案1】:

CUDA GPU 需要为 GPU 编译设备代码,这与为 x86 目标编译的典型库中的 x86 机器代码不同。

因此,要使用 GPU,您将需要 nvidia 编译器来生成机器代码。

有多种方法可以做到这一点:

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

  2. cuda driver API 和 cuda runtime API 中的大多数例程都可以使用标准 c++ 编译器从普通主机代码调用和链接。然而,这并没有解决如何处理设备代码的问题。如果设备代码使用驱动 API 在PTX form 中交付(不包括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 不断发展的功能。

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 2017-03-04
    • 2014-08-25
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2022-11-16
    • 2011-02-04
    相关资源
    最近更新 更多