OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  代码  ›  CUDA — NVIDIA GPU 计算平台

CUDA — NVIDIA GPU 计算平台

 
  architecture ·  2026-02-28 01:06:37 · 4 次点击  · 0 条评论  

CUDA 示例

面向 CUDA 开发者的示例程序,展示了 CUDA 工具包中的功能。此版本支持 CUDA Toolkit 13.1

发行说明

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

变更日志

修订历史

快速开始

前提条件

为您的对应平台下载并安装 CUDA Toolkit
关于 CUDA 工具包的系统要求和安装说明,请参阅 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

CMake 的语言服务在 Visual Studio 2019 版本 16.5 或更高版本中可用,您可以直接从根级别或任何子目录或单个示例导入 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 开发指南中的描述,安装 NVIDIA 工具链和 Tegra 设备的交叉编译环境。

确保已安装 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 容器中为汽车 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,或者在父文件夹的 CMakeLists.txt 中注释掉需要 Vulkan 和 libdrm_dev 的示例对应的 add_subdirectory 命令:

$ make -j$(nproc) --ignore-errors # 或 --keep-going
# 在 Samples/5_Domain_Specific/CMakeList.txt 中
# add_subdirectory(simpleGL)
# add_subdirectory(simpleVulkan)
# add_subdirectory(simpleVulkanMMAP)

# 在 Samples/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-safe-13.0/bin/nvcc \
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/toolchain-aarch64-qnx.cmake \
-DCMAKE_LIBRARY_PATH=/usr/local/cuda-safe-13.0/thor/targets/aarch64-qnx/lib/stubs/ \
-DCMAKE_INCLUDE_PATH=/usr/local/cuda-safe-13.0/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/ ..

安装示例

安装路径结构

安装系统根据以下内容自动将示例组织成结构化的目录布局:
- 目标架构:${CMAKE_SYSTEM_PROCESSOR},例如 x64aarch64amd64 等。
- 目标操作系统linuxwindowsdarwinqnx
- 构建类型releasedebug 等。

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

示例:
- Linux x86_64 Release:build/bin/x64/linux/release
- Linux aarch64 Release:build/bin/aarch64/linux/release
- Windows amd64 Release: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/Samples
--config 可执行文件参数的 JSON 配置文件 --config test_args.json
--output 测试结果的输出目录(stdout 保存为 .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/Samples --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)

您可以检查输出目录中的 stdout 日志(通常是 APM_<application_name>.txtAPM_<application_name>.run<n>.txt),以帮助从输出日志中确定可能出错的地方。如果您认为某个示例在您的系统上错误地失败,请针对示例仓库提交问题。

示例列表

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

演示 libNVVVM 和 NVVM IR 使用的示例。

8. 平台特定

针对特定平台(Tegra、cuDLA、NvMedia、NvSci、OpenGL ES)的示例。

依赖项

一些 CUDA 示例依赖于第三方应用程序和/或库,或者 CUDA 工具包和驱动程序提供的功能,以便构建或执行。这些依赖项如下所列。

如果示例具有系统上可用但未安装的第三方依赖项,该示例将在构建时自行放弃。

每个示例的依赖项在其 README 的 Dependencies 部分中列出。

第三方依赖项

这些第三方依赖项是一些 CUDA 示例所必需的。如果可用,这些依赖项要么自动安装在您的系统上,要么可以通过系统的包管理器(Linux)或第三方网站安装。

FreeImage

FreeImage 是一个开源图像库。通常可以使用 Linux 发行版的包管理器

4 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor