NVIDIA/cuda-samples

GitHub: NVIDIA/cuda-samples

NVIDIA 官方维护的 CUDA 示例集合,系统展示了 CUDA Toolkit 各项功能和加速库的使用方法。

Stars: 9041 | Forks: 2305

# CUDA 示例 为 CUDA 开发者提供的示例,展示了 CUDA Toolkit 中的功能。此版本支持 [CUDA Toolkit 13.2](https://developer.nvidia.com/cuda-downloads)。 ## 发行说明 本节仅描述 GitHub 上 CUDA Samples 的发行说明。 ### 更新日志 ### [修订历史](./CHANGELOG.md) ## 入门指南 ### 前置条件 下载并安装适用于您对应平台的 [CUDA Toolkit](https://developer.nvidia.com/cuda-downloads)。 有关 cuda toolkit 的系统要求和安装说明,请参阅 [Linux 安装指南](http://docs.nvidia.com/cuda/cuda-installation-guide-linux/) 和 [Windows 安装指南](http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html)。 ### 获取 CUDA Samples 使用 git 通过以下命令克隆 CUDA Samples 的仓库。 ``` git clone https://github.com/NVIDIA/cuda-samples.git ``` 如果不使用 git,使用这些示例最简单的方法是点击仓库页面上的“Download ZIP”按钮,下载包含当前版本的 zip 文件。然后您可以解压整个归档文件并使用这些示例。 ## 构建 CUDA Samples ### 构建 CUDA Samples CUDA Samples 使用 CMake 构建。请按照以下说明在 Linux、Windows 上构建,以及交叉编译到 Tegra 设备。 ### Linux 确保已安装 CMake(3.20 或更高版本)。如有必要,请使用您的包管理器进行安装: 例如: ```sudo apt install cmake``` 导航到克隆仓库的根目录并创建一个构建目录: ``` mkdir build && cd build ``` 使用 CMake 配置项目: ``` cmake .. ``` 构建示例: ``` make -j$(nproc) ``` 从构建文件夹中它们各自的目录运行示例。您也可以在 samples 仓库的任何子目录或任何单个示例中执行此过程。 ### Windows Visual Studio 2019 16.5 或更高版本中提供了用于 CMake 的语言服务,您可以直接从根级别或从任何子目录或单个示例导入 CUDA samples 仓库。 要从命令行构建,请打开 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(Build Solution)来构建示例。 从 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 Development Guide 中的说明安装 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 容器针对 Automotive Linux 平台的交叉构建 要从 DriveOS Docker 容器为目标平台构建 CUDA 示例,请使用以下说明。 在容器中挂载目标根文件系统 (RFS),以便 CUDA cmake 进程具有构建示例所需的 CUDA 和其他系统库的正确路径。 创建一个临时目录,`` 是您选择的任何临时目录,例如,您可以使用 `/drive/temp`: ``` $ mkdir /drive/ ``` 通过运行以下命令挂载文件系统: ``` $ 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 ``` ``` # 在 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 Toolkit(CUDA 13.0 或更高版本)、UMD(版本 580 或更高版本)和旧的 KMD(版本 550 或更早版本)构建示例,您需要设置 `CMAKE_PREFIX_PATH` 以使用新的驱动程序库,命令可能如下所示: ``` cmake -DCMAKE_PREFIX_PATH=/usr/local/cuda/lib64/stubs/ .. ``` ## 安装示例 ### 安装路径结构 安装系统会自动将示例组织到基于以下项的结构化目录布局中: - **目标架构**:${CMAKE_SYSTEM_PROCESSOR},例如 `x64`、`aarch64`、`amd64` 等。 - **目标操作系统**:`linux`、`windows`、`darwin`、`qnx` - **构建类型**:`release`、`debug` 等。 默认安装路径为:`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 Samples - Linux](#linux) 或 [构建]部分中的说明使用 CMake 配置项目。 配置和构建后,安装示例: ``` cd build/ make install ``` ### 在 Windows 上安装示例 **前置条件:**您必须首先按照 [构建 CUDA Samples - Windows](#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. 选择所需的配置(`Release` 或 `Debug`) 2. 构建解决方案(F7 或 Build > Build Solution) 3. 在 Solution Explorer 中右键单击 `CMakePredefinedTargets` 下的 `INSTALL` 目标 4. 选择“Build” ## 将所有示例作为测试运行 重要的是要注意,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_.txt` 或 `APM_.run.txt`),以帮助从输出日志中确定可能出了什么问题。如果您认为某个示例在您的系统上错误地失败了,请在示例仓库中提交问题。 ## 示例列表 ### [0. 简介](./Samples/0_Introduction/README.md) 面向初学者的基本 CUDA 示例,阐明了使用 CUDA 和 CUDA 运行时 API 的关键概念。 ### [1. 实用工具](./Samples/1_Utilities/README.md) 演示如何查询设备功能和测量 GPU/CPU 带宽的实用程序示例。 ### [2. 概念与技术](./Samples/2_Concepts_and_Techniques/README.md) 演示 CUDA 相关概念和常见问题解决技术的示例。 ### [3. CUDA 功能](./Samples/3_CUDA_Features/README.md) 演示 CUDA 功能(Cooperative Groups、CUDA Dynamic Parallelism、CUDA Graphs 等)的示例。 ### [4. CUDA 库](./Samples/4_CUDA_Libraries/README.md) 演示如何使用 CUDA 平台库(NPP、NVJPEG、NVGRAPH、cuBLAS、cuFFT、cuSPARSE、cuSOLVER 和 cuRAND)的示例。 ### [5. 特定领域](./Samples/5_Domain_Specific/README.md) 特定于领域(图形、金融、图像处理)的示例。 ### [6. 性能](./Samples/6_Performance/README.md) 演示性能优化的示例。 ### [7. libNVVM](./Samples/7_libNVVM/README.md) 演示 libNVVVM 和 NVVM IR 使用的示例。 ### [8. 特定平台](./Samples/8_Platform_Specific/Tegra/README.md) 特定于某些平台(Tegra、cuDLA、NvMedia、NvSci、OpenGL ES)的示例。 ## 依赖项 某些 CUDA Samples 依赖于第三方应用程序和/或库,或 CUDA Toolkit 和 Driver 提供的功能,以进行构建或执行。这些依赖项如下所列。 如果示例具有系统上可用但未安装的第三方依赖项,则该示例将在构建时自动豁免(跳过)。 每个示例的依赖项列在其 README 的依赖项部分中。 ### 第三方依赖项 某些 CUDA 示例需要这些第三方依赖项。如果可用,这些依赖项要么会自动安装在您的系统上,要么可以通过系统的包管理器 或第三方网站进行安装。 #### FreeImage FreeImage 是一个开源图像库。通常可以使用 Linux 发行版的包管理系统安装 FreeImage。也可以从 FreeImage 网站下载 FreeImage。 要在 Windows 系统上设置 FreeImage,将 FreeImage DLL 发行版解压到 `./Common/FreeImage/Dist/x64` 文件夹中,使其包含 .h 和 .lib 文件。将 .dll 文件复制到 Release/Debug 执行文件夹,或者在通过 `-DFreeImage_INCLUDE_DIR` 和 `-DFreeImage_LIBRARY` 选项配置 cmake 时传递 FreeImage 文件夹。 #### 消息传递接口 MPI (Message Passing Interface) 是一个用于在分布式进程之间通信数据的 API。可以使用 Linux 发行版的包管理系统安装 MPI 编译器。它也可在某些在线资源中找到,例如 [Open MPI](http://www.open-mpi.org/)。在 Windows 上,要构建和运行 MPI-CUDA 应用程序,可以安装 [MS-MPI SDK](https://msdn.microsoft.com/en-us/library/bb524831(v=vs.85).aspx)。 #### 仅限 64 位 某些示例只能在 64 位操作系统上运行。 #### DirectX DirectX 是一组 API,旨在允许在 Microsoft 平台上开发多媒体应用程序。对于 Microsoft 平台,NVIDIA 的 CUDA 驱动程序支持 DirectX。一些适用于 Windows 的 CUDA 示例演示了 CUDA-DirectX 互操作性,要构建此类示例,需要安装 Microsoft Visual Studio 2012 或更高版本,该版本提供了 Microsoft Windows SDK for Windows 8。 #### DirectX12 DirectX 12 是一组高级低级编程 API,可以减少驱动程序开销,旨在允许从 Windows 10 操作系统开始在 Microsoft 平台上开发多媒体应用程序。对于 Microsoft 平台,NVIDIA 的 CUDA 驱动程序支持 DirectX。少数适用于 Windows 的 CUDA 示例演示了 CUDA-DirectX12 互操作性,要构建此类示例,需要安装 [Windows 10 SDK 或更高版本](https://developer.microsoft.com/en-us/windows/downloads/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 Utility Toolkit (GLUT) 的替代品。其主要目的是使开发者更容易创建和管理包含 OpenGL 上下文的窗口,以及处理来自鼠标、键盘和操纵杆等设备的输入,并支持广泛的平台。要在 Windows on ARM 系统上设置 Freeglut,您需要从 [Freeglut 网站](https://freeglut.sourceforge.net/) 下载源代码,在您的系统上构建 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](https://www.lunarg.com/vulkan-sdk/)。 #### GLEW GLEW (OpenGL Extension Wrangler Library) 是一个跨平台的开源 C/C++ 库,旨在简化使用现代 OpenGL 功能和扩展的过程。其主要功能是在运行时动态加载 OpenGL 函数指针,允许开发者访问核心 OpenGL 函数以及硬件供应商提供的称为扩展的附加功能。要在 Windows on ARM 系统上设置 GLEW,您需要从 [GLEW 网站](https://glew.sourceforge.net/) 下载源代码,在您的系统上构建 GLEW,并将 glew32.lib 复制到 `./Common/lib/x64` 文件夹中,将 glew32.dll 复制到 `./bin/win64/${BUILD_TYPE}` 执行文件夹中。 #### GLFW GLFW 是一个轻量级的开源库,用于管理 OpenGL、OpenGL ES 和 Vulkan 上下文。它简化了以跨平台方式创建和管理窗口、处理用户输入(键盘、鼠标和操纵杆)以及使用多个显示器的过程。 要在 Windows 系统上设置 GLFW,请从 [GLFW 网站](https://www.glfw.org/download.html) 下载预构建的二进制文件,将 zip 文件解压到该文件夹中,并在配置 cmake 时将 GLFW 头文件文件夹作为 `-DGLFW_INCLUDE_DIR` 传递,将 lib 文件夹作为 `-DGLFW_LIB_DIR` 传递。 #### OpenMP OpenMP 是一个用于多处理编程的 API。可以使用您的 Linux 发行版的包管理系统安装 OpenMP。它通常随 GCC 预装。也可以在 [OpenMP 网站](http://openmp.org/) 上找到。对于 clang 等编译器,必须单独安装 `libomp.so` 和 LLVM 的其他组件。您还需要在 CMake 配置文件中设置额外的标志,例如:`-DOpenMP_CXX_FLAGS="-fopenmp=libomp" -DOpenMP_CXX_LIB_NAMES="omp" -DOpenMP_omp_LIBRARY="/path/to/libomp.so"`。 #### Screen Screen 是 QNX 操作系统上的窗口系统。Screen 通常作为根文件系统的一部分存在。 #### X11 X11 是常见于 *-nix 风格操作系统的窗口系统。可以使用 Linux 发行版的包管理器安装 X11,并且它预装在 Mac OS X 系统上。 #### ECUDA 示例 EGL 是 Khronos 渲染 API(如 OpenGL、OpenGL ES 或 OpenVG)与底层本地平台窗口系统之间的接口。 #### Linux EGLOutput 是一组 EGL 扩展,允许 EGL 直接渲染到显示器。 #### Windows EGLSync 是一组 EGL 扩展,提供属于同步原语的同步对象,表示可以测试或等待其完成的事件。 #### 在 Samples/5_Domain_Specific/CMakeList.txt 中 NvSci 是一组通信接口库,其中 CUDA 与 NvSciBuf 和 NvSciSync 进行互操作。NvSciBuf 允许应用程序在内存中分配和交换缓冲区。NvSciSync 允许应用程序管理同步对象,这些对象协调操作序列何时开始和结束。 #### add_subdirectory(simpleGL) NvMedia 为跨 NVIDIA Tegra 设备的真正硬件加速提供了强大的多媒体数据处理能力。应用程序利用 NvMedia 应用程序编程接口 (API) 来处理图像和视频数据。 ### CUDA 功能 某些 CUDA 示例需要这些 CUDA 功能。它们由 CUDA Toolkit 或 CUDA 驱动程序提供。某些功能可能在您的系统上不可用。 #### CUFFT 回调例程 CUFFT 回调例程是用户提供的内核例程,CUFFT 在加载或存储数据时将调用这些例程。这些回调例程仅在 Linux x86_64 和 ppc64le 系统上可用。 #### CUDA 动态并行 CDP (CUDA Dynamic Parallellism) 允许从 GPU 上运行的线程启动内核。CDP 仅在 SM 架构为 3.5 或更高版本的 GPU 上可用。 #### 多块协作组 Multi Block Cooperative Groups(MBCG) 扩展了协作组和 CUDA 编程模型,以表达线程块间同步。MBCG 在 Pascal 及更高架构的 GPU 上可用。 #### 多设备协作组 Multi Device Cooperative Groups 扩展了协作组和 CUDA 编程模型,使在多个 GPU 上执行的线程块能够在执行时进行协作和同步。此功能在 Pascal 及更高架构的 GPU 上可用。 #### add_subdirectory(simpleVulkan) CUBLAS (CUDA Basic Linear Algebra Subroutines) 是 BLAS 库的 GPU 加速版本。 #### CUDA 进程间通信 IPC (Interprocess Communication) 允许进程共享设备指针。 #### add_subdirectory(simpleVulkanMMAP) CUFFT (CUDA Fast Fourier Transform) 是一个 GPU 加速的 FFT 库。 #### 在 Samples/8_Platform_Specific/Tegra/CMakeList.txt 中 CURAND (CUDA Random Number Generation) 是一个 GPU 加速的 RNG 库。 #### add_subdirectory(simpleGLES_EGLOutput) CUSPARSE (CUDA Sparse Matrix) 提供用于稀疏矩阵计算的线性代数子例程。 #### QNX CUSOLVER 库是一个基于 CUBLAS 和 CUSPARSE 库的高级软件包。它在一个统一的框架下结合了三个独立的库,每个库都可以独立使用或与其他工具包库配合使用。CUSOLVER 旨在提供有用的 LAPACK 类功能,例如用于密集矩阵的通用矩阵分解和三角求解例程、稀疏最小二乘求解器和特征值求解器。此外,cuSolver 提供了一个新的重构库,可用于求解具有共享稀疏模式的矩阵序列。 #### [7. libNVVM](./Samples/7_libNVVM/README.md) NPP (NVIDIA Performance Primitives) 提供 GPU 加速的图像、视频和信号处理功能。 #### FreeImage NVGRAPH 是一个 GPU 加速的图分析库。 #### DirectX NVJPEG 库为深度学习和超大规模多媒体应用中常用的图像格式提供高性能、GPU 加速的 JPEG 解码功能。 #### DirectX12 NVRTC (CUDA RunTime Compilation) 是一个用于 CUDA C++ 的运行时编译库。 #### OpenGL NVJITLINK 是一个 CUDA 运行时库,它在运行时链接多个 GPU 设备代码对象,并启用即时链接时优化 (JIT LTO)。 它可以接收来自 NVCC 和 NVRTC 等工具的设备代码,即时链接和优化它,并生成最终的 GPU 二进制文件。有关更多详细信息,请参阅:https://docs.nvidia.com/cuda/nvjitlink/index.html #### 流优先级 Stream Priorities 允许创建具有指定优先级的流。Stream Priorities 仅在 SM 架构为 3.5 或更高版本的 GPU 上可用。 #### 统一虚拟内存 UVM (Unified Virtual Memory) 启用可以由 CPU 和 GPU 访问的内存,而无需在两者之间进行显式复制。UVM 仅在 Linux 和 Windows 系统上可用。 #### 16 位浮点 FP16 是一种 16 位浮点格式。一位用于符号,五位用于指数,十位用于尾数。 #### OpenGL ES NVCC 支持 [C++11 功能](https://en.wikipedia.org/wiki/C++11)。 #### Freeglut libNVVM 示例使用 [CMake](https://cmake.org/) 3.10 或更高版本构建。 ## 贡献者指南 我们欢迎您提出有关问题和示例建议的意见。目前我们不接受公众的贡献,随着我们贡献模式的发展,请随时关注这里。 我们对所有源代码使用 Google C++ 样式指南 https://google.github.io/styleguide/cppguide.html ## 常见问题解答 有关 CUDA 的常见问题解答可在 http://developer.nvidia.com/cuda-faq 和 [CUDA Toolkit 发行说明](http://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html) 中找到。 ## 参考文献 * [CUDA 编程指南](https://docs.nvidia.com/cuda/cuda-programming-guide/index.html) * [加速计算博客](https://developer.nvidia.com/blog/?tags=accelerated-computing) ## 致谢 * 茶壶图像获取自 [Wikimedia](https://en.wikipedia.org/wiki/File:Original_Utah_Teapot.jpg),并根据 Creative Commons [Attribution-Share Alike 2.0](https://creativecommons.org/licenses/by-sa/2.0/deed.en) 通用许可证获得许可。该图像已针对示例用例进行了修改。
标签:Bash脚本, C++, CMake, CUDA, CUDA Toolkit, DNS解析, GPU编程, UML, Vectored Exception Handling, 代码示例, 图形处理器, 官方示例, 客户端加密, 并行计算, 开发者资源, 开源项目, 异构计算, 技术文档, 数据分析, 数据擦除, 深度学习基础, 示例代码, 逆向工具, 高性能计算