cuda-samples:展示CUDA Toolkit功能的开发者示例,支持多平台构建与调试

Samples for CUDA Developers which demonstrates features in CUDA Toolkit

Branch2Tags29
FilesLast commitLast update
3 months ago
1 year ago
3 months ago
3 months ago
3 months ago
1 year ago
3 months ago
3 months ago
3 months ago
3 months ago
1 year ago
4 years ago
3 months ago
3 months ago
3 months ago
3 months ago

CUDA 示例程序

面向 CUDA 开发者的示例程序,用于演示 CUDA Toolkit 中的各项功能。此版本支持 CUDA Toolkit 13.3

发行说明

本节仅描述 GitHub 上 CUDA 示例程序的发行说明。

变更日志

修订历史

快速入门

前提条件

下载并安装适用于您相应平台的 CUDA Toolkit。 有关 CUDA Toolkit 的系统要求和安装说明,请参考 Linux 安装指南Windows 安装指南

获取 CUDA 示例程序

使用 git 通过以下命令克隆 CUDA 示例程序仓库。

git clone https://github.com/NVIDIA/cuda-samples.git

如果不使用 git,使用这些示例最简单的方法是通过点击仓库页面上的“Download ZIP”按钮,下载包含当前版本的 zip 文件。然后您可以解压缩整个归档文件并使用这些示例。

构建 CUDA 示例

构建 CUDA 示例

CUDA 示例使用 CMake 构建。请按照以下说明在 Linux、Windows 上进行构建,以及交叉编译到 Tegra 设备。

Linux

确保已安装 CMake(3.20 版或更高版本)。如有必要,使用您的包管理器进行安装:

例如: sudo apt install cmake

导航到克隆仓库的根目录并创建一个构建目录:

mkdir build && cd build

使用 CMake 配置项目:

cmake ..

构建示例:

make -j$(nproc)

从构建文件夹中各自的目录运行示例。您也可以从示例仓库的任何子目录或任何单个示例内执行此过程。

Windows

Visual Studio 2019 16.5 版或更高版本中提供了 CMake 语言服务,您可以直接从根级别、任何子目录或单个示例导入 CUDA 示例仓库。

要从命令行构建,请打开 Visual Studio 安装中提供的 x64 Native Tools Command Prompt for VS

导航到克隆仓库的根目录并创建一个构建目录:

mkdir build && cd build

使用 CMake 配置项目 - 例如:

cmake .. -G "Visual Studio 16 2019" -A x64

在 Visual Studio 中打开生成的解决方案文件 CUDA_Samples.sln。通过选择所需的配置(例如 Debug 或 Release)并按 F7(生成解决方案)来生成示例。

从 Visual Studio 中指定的输出目录运行示例。

启用 GPU 调试

NVIDIA GPU 通过 cuda-gdb 支持 GPU 调试。启用此功能可能会显著影响应用程序性能,因为在此配置中某些编译器优化会被禁用,因此默认情况下不启用。设备调试的启用通过 nvcc 的 -G 开关控制。

要为示例生成启用 cuda-gdb,请在 CMake 命令行上定义 ENABLE_CUDA_DEBUG 标志。例如:

cmake -DENABLE_CUDA_DEBUG=True ...

平台特定示例

部分 CUDA 示例特定于某些平台,需要向 CMake 传递标志才能启用。具体来说,我们定义了以下平台特定标志:

  • BUILD_TEGRA - 用于 Tegra 特定示例

要构建这些示例,请在命令行或通过 CMake GUI 设置变量。例如:

cmake -DBUILD_TEGRA=True ..

Tegra 平台的交叉编译

按照《Tegra 开发指南》中的说明,安装适用于 Tegra 设备的 NVIDIA 工具链和交叉编译环境。

确保已安装 CMake(3.20 版或更高版本)。

导航至克隆仓库的根目录并创建一个构建目录:

mkdir build && cd build

使用 CMake 配置项目时,需指定 Tegra 工具链文件。您可以使用 -DTARGET_FS 指向目标文件系统根路径,以获取必要的头文件和库文件:

cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/toolchain-aarch64-linux.cmake -DTARGET_FS=/path/to/target/system/file/system

构建示例:

make -j$(nproc)

将构建好的二进制文件传输到 Tegra 设备并在那里执行。

从 DriveOS Docker 容器为 Automotive Linux 平台进行交叉构建

要从 DriveOS Docker 容器为目标平台构建 CUDA 示例,请使用以下说明。

在容器中挂载目标根文件系统 (RFS),以便 CUDA cmake 过程能够找到构建示例所需的 CUDA 和其他系统库的正确路径。

创建一个临时目录,<temp> 可以是您选择的任何临时目录,例如,您可以使用 /drive/temp

$ mkdir /drive/<temp>

通过运行以下命令挂载文件系统:

$ mount /drive/drive-linux/filesystem/targetfs-images/dev_nsr_desktop_ubuntu-24.04_thor_rfs.img /drive/temp

通过运行以下 cmake 命令配置项目:

$ mkdir build && cd build
$ cmake .. -DBUILD_TEGRA=True \
  -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc \
  -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/toolchain-aarch64-linux.cmake \
  -DTARGET_FS=/drive/temp \
  -DCMAKE_LIBRARY_PATH=/drive/temp/usr/local/cuda-13.1/thor/lib64/ \
  -DCMAKE_INCLUDE_PATH=/drive/temp/usr/local/cuda-13.1/thor/include/

请注意,以下库未预先安装在 DriveOS dev-nsr 目标文件系统中:

  • libdrm-dev
  • Vulkan

这会导致 cmake 命令抛出与缺失文件相关的错误,因此相关示例将无法在后续步骤中构建。此问题将在未来的 DriveOS 版本中得到解决。

要忽略上述错误并构建示例,您可以使用 --ignore-errors/--keep-going,或者在需要 Vulkan 和 libdrm_dev 的示例的父文件夹的 CMakeLists.txt 中注释掉相应的 add_subdirectory 命令:

$ make -j$(nproc) --ignore-errors # or --keep-going
# In cpp/5_Domain_Specific/CMakeList.txt
# add_subdirectory(simpleGL)
# add_subdirectory(simpleVulkan)
# add_subdirectory(simpleVulkanMMAP)

# In cpp/8_Platform_Specific/Tegra/CMakeList.txt
# add_subdirectory(simpleGLES_EGLOutput)

QNX

CUDA 13.0 及更新版本的示例支持使用 CMake 为 QNX 进行交叉编译。针对 Tegra Thor QNX 平台的示例构建可能如下所示:

$ mkdir build
$ cd build

QNX_HOST=/path/to/qnx/host \
QNX_TARGET=/path/to/qnx/target \
cmake .. \
-DBUILD_TEGRA=True \
-DCMAKE_CUDA_COMPILER=/usr/local/cuda-13.3/bin/nvcc \
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/toolchain-aarch64-qnx.cmake \
-DCMAKE_LIBRARY_PATH=/usr/local/cuda-13.3/thor/targets/aarch64-qnx/lib/stubs/ \
-DCMAKE_INCLUDE_PATH=/usr/local/cuda-13.3/thor/targets/aarch64-qnx/include/

向前兼容性

若要使用新版本的 CUDA 工具包(CUDA 13.0 或更高版本)和用户模式驱动程序(UMD,版本 580 或更高版本)与旧版本的内核模式驱动程序(KMD,版本 550 或更低版本)构建示例,需设置 CMAKE_PREFIX_PATH 以使用新的驱动程序库,命令示例如下:

cmake -DCMAKE_PREFIX_PATH=/usr/local/cuda/lib64/stubs/ ..

CUDA Python 示例

该仓库在 python/ 目录下包含Python示例。这些示例以 cuda.core 为核心:它们使用 CUDA Python,借助 cuda.core 处理设备、程序、启动和内存,并根据每个示例的说明,结合 NumPy、CuPy 或框架互操作。

布局(与 C++ 示例主题相同):

目录 内容
python/1_GettingStarted/ 入门脚本(例如 vectorAdddeviceQuerysystemInfo、使用统一内存的图像模糊、NumPy 与 CuPy 对比)。
python/2_CoreConcepts/ 算法和技术(例如归约、直方图、FFT、流重叠、memoryResourcescudaGraphsjitLtoLinkingtmaTensorMap)。
python/3_FrameworkInterop/ 与 PyTorch 和 TensorFlow 的集成。
python/4_DistributedComputing/ 多 GPU、对等通信和 IPC 模式(ipcMemoryPool)。
python/Utilities/ 部分示例导入的共享辅助工具。

运行方法: 顶层 CMake 构建不会编译这些示例。对于每个示例,请使用 Python 3.10+ 环境以及匹配的 CUDA Toolkit(这些示例面向 CUDA 13.x,并在 requirements.txt 中记录了确切的包版本):

cd python/<category>/<sampleName>
pip install -r requirements.txt
python <sampleScript>.py

使用每个示例的 README.md 获取先决条件、命令行选项和预期输出。

安装示例

安装路径结构

安装系统会根据以下信息自动将示例组织到结构化的目录布局中:

  • 目标架构:${CMAKE_SYSTEM_PROCESSOR},例如 x64aarch64amd64 等。
  • 目标操作系统linuxwindowsdarwinqnx
  • 构建类型releasedebug 等。

默认安装路径为:build/bin/${TARGET_ARCH}/${TARGET_OS}/${BUILD_TYPE}

示例:

  • Linux x86_64 发布版:build/bin/x64/linux/release
  • Linux aarch64 发布版:build/bin/aarch64/linux/release
  • Windows amd64 发布版:build/bin/amd64/windows/release

自定义安装路径

您可以在配置步骤中使用 CMake 变量来自定义安装位置:

  • CMAKE_INSTALL_PREFIX:更改根安装目录(默认值:build/bin

    cmake -DCMAKE_INSTALL_PREFIX=/custom/path ..
    

    这将安装到:/custom/path/${TARGET_ARCH}/${TARGET_OS}/${BUILD_TYPE}

  • CUDA_SAMPLES_INSTALL_DIR:指定确切的最终安装目录(覆盖结构化路径)

    cmake -DCUDA_SAMPLES_INSTALL_DIR=/exact/install/path ..
    

在 Linux 上安装示例

先决条件: 您必须首先按照 构建 CUDA 示例 - Linux 或 [构建] 部分中的说明使用 CMake 配置项目。

配置并构建完成后,安装示例:

cd build/
make install

在 Windows 上安装示例

前提条件: 您必须首先按照 构建 CUDA 示例 - Windows 部分中的说明使用 CMake 配置项目。

使用命令行

使用 CMake 配置后,从 x64 Native Tools Command Prompt for VS 进行构建和安装:

cd build
cmake --build . --config Release
cmake --install . --config Release

注意: 如果要安装调试版本,请将 Release 替换为 Debug。对于多配置生成器(如 Visual Studio),--config 标志决定要安装的生成类型。

使用 Visual Studio IDE

或者,在 Visual Studio 中打开生成的解决方案文件 CUDA_Samples.sln

  1. 选择所需的配置(ReleaseDebug
  2. 生成解决方案(F7 或“生成”>“生成解决方案”)
  3. 在“解决方案资源管理器”中的“CMakePredefinedTargets”下,右键单击 INSTALL 目标
  4. 选择“生成”

将所有示例作为测试运行

需要注意的是,CUDA 示例并非旨在作为 CUDA 的验证套件。它们不涵盖极端情况,也未完全涵盖运行时和驱动程序 API,不适用于性能基准测试等。尽管如此,将所有示例作为快速健全性检查运行有时会很有用,我们提供了一个脚本来执行此操作,即 run_tests.py

此 Python3 脚本会在您选择的子目录中查找所有可执行文件,并将应用程序名称与 test_args.json 中指定的命令行参数进行匹配。它接受以下命令行参数:

开关 用途 示例
--dir 指定用于搜索可执行文件的根目录(递归搜索) --dir ./build/cpp
--config 用于可执行文件参数的 JSON 配置文件 --config test_args.json
--output 测试结果的输出目录(标准输出保存到 .txt 文件 - 目录不存在时将创建) --output ./test
--args 要传递给所有可执行文件的全局参数(当前未使用) --args arg_1 arg_2 ...
--parallel 要并行执行的应用程序数量。 --parallel 8

应用程序配置从 test_args.json 加载,并与可执行文件名称匹配(在 Windows 上会丢弃 .exe 扩展名)。

脚本成功时返回 0,失败时返回测试过程中遇到的第一个非零错误代码。如果有失败的示例,它还会打印一个精简的失败示例列表。

有三种主要的配置模式:

跳过

配置为“skip”的可执行文件将不会被执行。这些可执行文件通常依赖于已连接的图形显示器,不适合此类自动化。

配置示例:

"fluidsGL": {
    "skip": true
}

您将看到:

Skipping fluidsGL (marked as skip in config)

单次运行

对于只需运行一次并带参数的可执行文件,请将每个参数指定为列表项。JSON 文件中的每个条目将以空格分隔的形式附加到命令行。

所有应用程序均从其当前目录执行,因此所有路径均相对于应用程序的位置。

请注意,如果应用程序不需要参数,则此项为可选。如果可执行文件在 JSON 中没有匹配条目,它将从其当前目录以 ./application 的形式运行。

配置示例:

"ptxgen": {
    "args": [
        "test.ll",
        "-arch=compute_75"
    ]
}

您将看到:

Running ptxgen
    Command: ./ptxgen test.ll -arch=compute_75
    Test completed with return code 0

多次运行

若要让可执行文件使用不同的命令行参数运行多次,可在“runs”列表中指定任意数量的参数集。

与单次运行相同,所有应用程序均从其当前目录执行,因此所有路径均相对于应用程序的位置。

配置示例:

"recursiveGaussian": {
    "runs": [
        {
            "args": [
                "-sigma=10",
                "-file=data/ref_10.ppm"
            ]
        },
        {
            "args": [
                "-sigma=14",
                "-file=data/ref_14.ppm"
            ]
        },
        {
            "args": [
                "-sigma=18",
                "-file=data/ref_18.ppm"
            ]
        },
        {
            "args": [
                "-sigma=22",
                "-file=data/ref_22.ppm"
            ]
        }
    ]
}

您将看到:

Running recursiveGaussian (run 1/4)
    Command: ./recursiveGaussian -sigma=10 -file=data/ref_10.ppm
    Test completed with return code 0
Running recursiveGaussian (run 2/4)
    Command: ./recursiveGaussian -sigma=14 -file=data/ref_14.ppm
    Test completed with return code 0
Running recursiveGaussian (run 3/4)
    Command: ./recursiveGaussian -sigma=18 -file=data/ref_18.ppm
    Test completed with return code 0
Running recursiveGaussian (run 4/4)
    Command: ./recursiveGaussian -sigma=22 -file=data/ref_22.ppm
    Test completed with return code 0

示例用法

以下是一组用于构建和测试所有示例的命令示例。

首先,进行构建:

mkdir build
cd build
cmake ..
make -j$(nproc)

现在,返回到示例根目录并运行测试脚本:

cd ..
python3 run_tests.py --output ./test --dir ./build/cpp --config test_args.json

如果所有应用程序都成功运行,您将看到类似以下的内容(具体的示例数量将取决于您的构建类型和系统配置):

Test Summary:
Ran 199 test runs for 180 executables.
All test runs passed!

如果某些示例运行失败,您会看到类似以下的内容:

Test Summary:
Ran 199 test runs for 180 executables.
Failed runs (2):
  bicubicTexture (run 1/5): Failed (code 1)
  Mandelbrot (run 1/2): Failed (code 1)

你可以在输出目录中查看标准输出日志(通常为 APM_<application_name>.txtAPM_<application_name>.run<n>.txt),以帮助根据输出日志确定可能出现的问题。如果你认为某个示例在你的系统上运行异常,请在示例代码仓库提交 issue。

示例列表

0. 入门介绍

面向初学者的基础 CUDA 示例,通过使用 CUDA 和 CUDA 运行时 API 阐释关键概念。

1. 实用工具

演示如何查询设备功能以及测量 GPU/CPU 带宽的实用工具示例。

2. 概念与技巧

演示 CUDA 相关概念和常见问题解决技巧的示例。

3. CUDA 特性

演示 CUDA 特性(协作组、CUDA 动态并行、CUDA 图等)的示例。

4. CUDA 库

演示如何使用 CUDA 平台库(NPP、NVJPEG、NVGRAPH、cuBLAS、cuFFT、cuSPARSE、cuSOLVER 和 cuRAND)的示例。

5. 特定领域

特定于领域(图形学、金融、图像处理)的示例。

6. 性能

演示性能优化的示例。

7. libNVVM

演示 libNVVM 和 NVVM IR 使用方法的示例。

8. 特定平台

特定于某些平台(Tegra、cuDLA、NvMedia、NvSci、OpenGL ES)的示例。

9. CUDA Tile

演示如何使用 CUDA Tile C++ 的示例。

依赖项

部分 CUDA 示例在构建或执行时依赖第三方应用程序和/或库,或 CUDA 工具包与驱动程序提供的功能。以下列出了这些依赖项。

如果某个示例存在系统上可用但未安装的第三方依赖项,该示例将在构建时自动跳过。

每个示例的依赖项均列于其 README 的“依赖项”部分。

第三方依赖项

部分 CUDA 示例需要以下第三方依赖项。若这些依赖项可用,它们会自动安装到您的系统中,或者可通过系统的包管理器(Linux)或第三方网站进行安装。

FreeImage

FreeImage 是一个开源图像库。在 Linux 系统上,通常可以使用发行版的包管理器安装 FreeImage。也可以从 FreeImage 官方网站下载 FreeImage。

要在 Windows 系统上设置 FreeImage,请将 FreeImage DLL 分发版解压到 ./Common/FreeImage/Dist/x64 文件夹中,确保该文件夹包含 .h 和 .lib 文件。将 .dll 文件复制到 Release/ Debug/ 执行文件夹,或者在 cmake 配置时通过 -DFreeImage_INCLUDE_DIR-DFreeImage_LIBRARY 选项指定 FreeImage 文件夹。

消息传递接口

MPI(Message Passing Interface)是用于在分布式进程之间通信数据的 API。可以使用 Linux 发行版的包管理器安装 MPI 编译器。也可从一些在线资源获取,例如 Open MPI。在 Windows 上,要构建和运行 MPI-CUDA 应用程序,可以安装 MS-MPI SDK

仅支持 64 位

部分示例只能在 64 位操作系统上运行。

DirectX

DirectX 是一组 API,旨在允许在 Microsoft 平台上开发多媒体应用程序。对于 Microsoft 平台,NVIDIA 的 CUDA 驱动程序支持 DirectX。有几个 Windows 版 CUDA 示例展示了 CUDA 与 DirectX 的互操作性,要构建此类示例,需要安装 Microsoft Visual Studio 2012 或更高版本,该版本提供适用于 Windows 8 的 Microsoft Windows SDK。

DirectX12

DirectX 12 是一组高级低级编程 API,可减少驱动程序开销,旨在从 Windows 10 操作系统开始,允许在 Microsoft 平台上开发多媒体应用程序。对于 Microsoft 平台,NVIDIA 的 CUDA 驱动程序支持 DirectX。少数 Windows 版 CUDA 示例展示了 CUDA 与 DirectX 12 的互操作性,要构建此类示例,需要安装 Windows 10 SDK 或更高版本,并搭配 VS 2015 或 VS 2017。

OpenGL

OpenGL 是用于 2D 和 3D 渲染的图形库。在支持 OpenGL 的系统上,NVIDIA 的 OpenGL 实现随 CUDA 驱动程序一起提供。

OpenGL ES

OpenGL ES 是用于嵌入式系统的 2D 和 3D 渲染图形库。在支持 OpenGL ES 的系统上,NVIDIA 的 OpenGL ES 实现随 CUDA 驱动程序一起提供。

Freeglut

Freeglut 是一个开源软件库,用作原始 OpenGL 实用工具包(GLUT)的替代品。其主要目的是使开发人员能够更轻松地创建和管理包含 OpenGL 上下文的窗口,并跨多种平台处理来自鼠标、键盘和操纵杆等设备的输入。要在 ARM 架构的 Windows 系统上设置 Freeglut,需要从 Freeglut 官方网站 下载源代码,在系统上构建 freeglut,然后将 freeglut.lib 复制到 ./Common/lib/x64 文件夹,并将 freeglut.dll 文件复制到 ./bin/win64/${BUILD_TYPE} 执行文件夹。

Vulkan

Vulkan 是一种低开销、跨平台的 3D 图形和计算 API。Vulkan 面向所有平台上的高性能实时 3D 图形应用程序,如视频游戏和交互式媒体。在支持 Vulkan 的系统上,NVIDIA 的 Vulkan 实现随 CUDA 驱动程序一起提供。要构建和运行 Vulkan 应用程序,需要安装 Vulkan SDK

GLEW

GLEW(OpenGL Extension Wrangler Library)是一个跨平台、开源的 C/C++ 库,旨在简化使用现代 OpenGL 功能和扩展的过程。其主要功能是在运行时动态加载 OpenGL 函数指针,允许开发人员访问核心 OpenGL 函数以及硬件供应商提供的其他功能(称为扩展)。要在 ARM 架构的 Windows 系统上设置 GLEW,需要从 GLEW 官方网站 下载源代码,在系统上构建 GLEW,然后将 glew32.lib 复制到 ./Common/lib/x64 文件夹,并将 glew32.dll 复制到 ./bin/win64/${BUILD_TYPE} 执行文件夹。

GLFW

GLFW 是一个轻量级的开源库,旨在管理 OpenGL、OpenGL ES 和 Vulkan 上下文。它简化了跨平台创建和管理窗口、处理用户输入(键盘、鼠标和操纵杆)以及使用多台显示器的过程。

要在 Windows 系统上设置 GLFW,请从 GLFW 官方网站 下载预构建的二进制文件,并将 zip 文件解压到文件夹中。在 cmake 配置时,通过 -DGLFW_INCLUDE_DIR 指定 GLFW 头文件包含文件夹,通过 -DGLFW_LIB_DIR 指定库文件夹。

OpenMP

OpenMP 是一个用于多处理编程的 API。可以使用 Linux 发行版的包管理器安装 OpenMP。它通常与 GCC 一起预装。也可以在 OpenMP 官方网站 上找到。对于 clang 等编译器,确保在构建 LLVM 时通过在 LLVM_ENABLE_PROJECTS 中包含 openmp 来启用 OpenMP。如果使用启用了 OpenMP 的 clang(来自已安装的前缀或直接来自 LLVM 构建树),请将 CMAKE_CXX_COMPILER 和 CMAKE_CUDA_HOST_COMPILER 设置为该 clang++,并让 CMake 检测 OpenMP;通常不需要额外的 OpenMP_* CMake 变量。当直接从 LLVM 构建树使用 clang++ 时,在构建示例之前,可能需要将生成的 omp.h 复制到 clang++ --print-resource-dir 报告的路径下的 include/ 目录中。当使用已安装的、启用了 OpenMP 的 clang 时,如果在运行时看到“libomp.so: cannot open shared object file”,请将包含 libomp.so 的目录添加到 LD_LIBRARY_PATH(或通过 ld.so.conf.d 进行配置),以便动态链接器能够找到 OpenMP 运行时。

Screen

Screen 是 QNX 操作系统上的窗口系统。Screen 通常作为根文件系统的一部分提供。

X11

X11 是在类 *-nix 操作系统上常见的窗口系统。可以使用 Linux 发行版的包管理器安装 X11,并且在 Mac OS X 系统上预装。

EGL

EGL 是 Khronos 渲染 API(如 OpenGL、OpenGL ES 或 OpenVG)与底层原生平台窗口系统之间的接口。

EGLOutput

EGLOutput 是一组 EGL 扩展,允许 EGL 直接渲染到显示器。

EGLSync

EGLSync 是一组 EGL 扩展,提供作为同步原语的同步对象,表示可以测试或等待其完成的事件。

NVSCI

NvSci 是一组通信接口库,CUDA 通过其中的 NvSciBuf 和 NvSciSync 进行互操作。NvSciBuf 允许应用程序在内存中分配和交换缓冲区。NvSciSync 允许应用程序管理同步对象,这些对象协调操作序列的开始和结束时间。

NvMedia

NvMedia 为 NVIDIA Tegra 设备提供强大的多媒体数据处理能力,实现真正的硬件加速。应用程序利用 NvMedia 应用程序编程接口(API)来处理图像和视频数据。

CUDA 功能特性

部分 CUDA 示例需要以下 CUDA 功能特性的支持。这些特性由 CUDA Toolkit 或 CUDA Driver 提供,部分特性可能在您的系统上不可用。

CUFFT 回调例程

CUFFT 回调例程是用户提供的内核例程,CUFFT 会在加载或存储数据时调用这些例程。此类回调例程仅在 Linux x86_64 和 ppc64le 系统上可用。

CUDA 动态并行

CDP(CUDA Dynamic Parallellism)允许从在 GPU 上运行的线程中启动内核。CDP 仅在 SM 架构为 3.5 或更高版本的 GPU 上可用。

多块协作组

多块协作组(MBCG)扩展了协作组和 CUDA 编程模型,以支持线程块间的同步。MBCG 在 Pascal 及更高架构的 GPU 上可用。

多设备协作组

多设备协作组扩展了协作组和 CUDA 编程模型,使在多个 GPU 上执行的线程块能够在执行过程中进行协作和同步。此特性在 Pascal 及更高架构的 GPU 上可用。

CUBLAS

CUBLAS(CUDA Basic Linear Algebra Subroutines)是 BLAS 库的 GPU 加速版本。

CUDA 进程间通信

IPC(Interprocess Communication)允许进程共享设备指针。

CUFFT

CUFFT(CUDA Fast Fourier Transform)是 GPU 加速的 FFT 库。

CURAND

CURAND(CUDA Random Number Generation)是 GPU 加速的随机数生成库。

CUSPARSE

CUSPARSE(CUDA Sparse Matrix)提供用于稀疏矩阵计算的线性代数子程序。

CUSOLVER

CUSOLVER 库是基于 CUBLAS 和 CUSPARSE 库的高级软件包。它将三个独立的库整合在一个统一框架下,每个库既可以独立使用,也可以与其他工具库协同工作。CUSOLVER 的目的是提供类似 LAPACK 的实用功能,例如用于稠密矩阵的常见矩阵分解和三角求解例程、稀疏最小二乘求解器以及特征值求解器。此外,cuSolver 还提供了一个新的重构库,适用于求解具有共享稀疏模式的矩阵序列。

NPP

NPP(NVIDIA Performance Primitives)提供 GPU 加速的图像、视频和信号处理函数。

NVGRAPH

NVGRAPH 是 GPU 加速的图分析库。

NVJPEG

NVJPEG 库提供高性能的 GPU 加速 JPEG 解码功能,适用于深度学习和超大规模多媒体应用中常用的图像格式。

NVRTC

NVRTC(CUDA RunTime Compilation)是用于 CUDA C++ 的运行时编译库。

NVJITLINK 是一个 CUDA 运行时库,可在运行时链接多个 GPU 设备代码对象,并支持即时链接时优化(JIT LTO)。 它可以接收来自 NVCC 和 NVRTC 等工具的设备代码,动态进行链接和优化,并生成最终的 GPU 二进制文件。有关更多详细信息,请参见:https://docs.nvidia.com/cuda/nvjitlink/index.html

流优先级

流优先级允许创建具有指定优先级的流。流优先级仅在 SM 架构为 3.5 或更高版本的 GPU 上可用。

统一虚拟内存

UVM(Unified Virtual Memory)支持可由 CPU 和 GPU 访问的内存,无需在两者之间进行显式数据复制。UVM 仅在 Linux 和 Windows 系统上可用。

16 位浮点数

FP16 是一种 16 位浮点格式。其中 1 位用于符号位,5 位用于指数位,10 位用于尾数位。

C++11 CUDA

NVCC 对 C++11 特性 的支持。

CMake

libNVVM 示例使用 CMake 3.10 或更高版本构建。

贡献者指南

我们欢迎您就示例相关的问题和建议提供反馈。目前,我们暂不接受公众贡献,随着贡献模式的不断完善,请您关注此处的更新。

所有源代码均遵循《Google C++ 风格指南》:https://google.github.io/styleguide/cppguide.html

常见问题

关于 CUDA 的常见问题解答,请访问 http://developer.nvidia.com/cuda-faq 以及 CUDA 工具包发行说明

参考资料

致谢

Introduction

CUDA 示例集:NVIDIA 提供的 CUDA 开发样例,旨在演示如何运用 CUDA Toolkit 实现GPU 加速计算。【此简介由AI生成】

Customize your domain
1339.6 K2.42 KVisit GitHub