
CUDA Samples 版本演进全解析从 CUDA 9.2 到 13.3 的变更日志深度解读【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samplesCUDA Samples 是 NVIDIA 官方提供的 CUDA Toolkit 功能示例集其 CHANGELOG.md 记录了从 CUDA 9.2 首次开源发布到 CUDA 13.3 的全部版本演进。本文以该变更日志为核心骨架结合仓库源码C 与 Python 示例、CMake 构建脚本、公共头文件逐版本剖析 API 迁移、示例增删与工程化改进帮助你快速定位哪个示例对应哪个 CUDA 版本特性并在升级 CUDA Toolkit 时准确预判构建与代码迁移风险。一、版本全貌与目录结构演进1.1 版本时间线概览从 CHANGELOG.md 可以梳理出仓库覆盖的版本区间CUDA 9.2GitHub 首版发布→ 10.x → 11.x目录结构重构、全面转向 GitHub 分发→ 12.xCMake 构建迁移、跨平台工具链更新→ 13.x重大 API 弃用清理、CUDA Python 与 CUDA Tile 新示例群。各版本的核心动作可归纳为三类新增示例、移除过时示例、适配 API 变更。1.2 目录结构与语言双轨CUDA 13.2 起仓库将顶层Samples目录重命名为cpp以便与新增的python/示例并存cpp/C/CUDA 示例按功能分为0_Introduction、1_Utilities、2_Concepts_and_Techniques、3_CUDA_Features、4_CUDA_Libraries、5_Domain_Specific、6_Performance、7_libNVVM、8_Platform_Specific/Tegra、9_CUDA_Tile共十个子目录python/CUDA Python 示例采用与 C 树一致的1_GettingStarted、2_CoreConcepts、3_FrameworkInterop、4_DistributedComputing组织方式并共享 python/Utilities/cuda_samples_utils.py 等辅助模块Common/C 示例共享的公共头文件helper_cuda.h、helper_image.h、nvrtc_helper.h等。注意CHANGELOG 明确指出Python 示例不参与根 CMake 工程的构建。安装方式为在示例目录内执行pip install -r requirements.txt再按各示例 README 运行对应的.py文件。二、CUDA 13.xAPI 大迁移与新特性示例CUDA 13.x 是变更最密集的版本段核心工作是清理被弃用deprecated并移除的 API同时引入两个全新的示例族。2.1 CUDA 13.0cudaDeviceProp 字段迁移到 cudaDeviceGetAttributeCUDA 13.0 移除了多个cudaDeviceProp字段仓库统一改用cudaDeviceGetAttribute查询等价属性。CHANGELOG 给出了完整的字段映射表被移除的cudaDeviceProp字段替代查询cudaDeviceGetAttribute枚举clockRatecudaDevAttrClockRatedeviceOverlapcudaDevAttrGpuOverlapkernelExecTimeoutEnabledcudaDevAttrKernelExecTimeoutcomputeModecudaDevAttrComputeModememoryClockRatecudaDevAttrMemoryClockRatecooperativeMultiDeviceLaunch弃用cudaLaunchCooperativeKernelMultiDevice亦已弃用源码印证在 deviceQuery.cpp 中可以看到典型迁移模式并且通过CUDART_VERSION 13000宏做了条件编译——CUDA 13.0 及以上走cudaDeviceGetAttribute旧版本仍读deviceProp字段保证跨版本兼容int clockRate; checkCudaErrors(cudaDeviceGetAttribute(clockRate, cudaDevAttrClockRate, dev)); printf( GPU Max Clock rate: %.0f MHz (%0.2f GHz)\n, clockRate * 1e-3f, clockRate * 1e-6f); #if CUDART_VERSION 13000 checkCudaErrors(cudaDeviceGetAttribute(memoryClockRate, cudaDevAttrMemoryClockRate, dev)); #else memoryClockRate deviceProp.memoryClockRate; #endif同样地kernelExecTimeout与gpuOverlapdeviceQuery.cpp、computeModedeviceQuery.cpp也都切换到了属性查询接口而cooperativeMultiDeviceLaunch则在 CUDA 13.0 起直接由#if CUDART_VERSION 13000保护deviceQuery.cpp。本次迁移涉及 6 个目录下的示例包括UnifiedMemoryStreams、simpleHyperQ、simpleIPC、simpleMultiCopy、systemWideAtomics、streamOrderedAllocationIPC、simpleCUBLASXT、simpleVulkan、vulkanImageCUDA等。2.2 CUDA 13.0Driver API 与 Runtime API 签名升级除cudaDeviceProp外CUDA 13.0 还升级了三个核心 API 签名1cuCtxCreate→cuCtxCreate_v4新增CUctxCreateParams参数。公共头文件 nvrtc_helper.h 中loadCUBIN的实现即为标准迁移样板——先初始化空的CUctxCreateParams ctxCreateParams {}再传入cuCtxCreateCUctxCreateParams ctxCreateParams {}; ... checkCudaErrors(cuInit(0)); checkCudaErrors(cuCtxCreate(context, ctxCreateParams, 0, cuDevice));受影响的示例包括 Driver API 系列matrixMulDrv、simpleTextureDrv、vectorAddDrv、vectorAddMMAP、memMapIPCDrv以及7_libNVVM下的cuda-c-linking、device-side-launch、simple、uvmlite等。2cudaGraphAddNode/cudaStreamGetCaptureInfo→_v2/_v3新增cudaGraphEdgeData指针参数。以 graphConditionalNodes.cu 为例cudaGraphAddNode的调用模式为传入 NULL 依赖数组与边数据指针checkCudaErrors(cudaGraphAddNode(kernelNode, graph, NULL, NULL, 0, params)); checkCudaErrors(cudaGraphAddNode(conditionalNode, graph, kernelNode, NULL, 0, cParams));3cudaMemAdvise/cudaMemPrefetchAsync→_v2int device参数改为cudaMemLocation location。涉及conjugateGradientMultiDeviceCG与UnifiedMemoryPerf两个多 GPU 内存管理示例。2.3 CUDA 13.0cuFFT 错误码重构cuFFT 弃用了CUFFT_INCOMPLETE_PARAMETER_LIST、CUFFT_PARSE_ERROR、CUFFT_LICENSE_ERROR新增四个错误码。公共头文件 helper_cuda.h 中的_cudaGetErrorEnum(cufftResult)已同步加入新错误码的字符串映射case CUFFT_MISSING_DEPENDENCY: return CUFFT_MISSING_DEPENDENCY; case CUFFT_NVRTC_FAILURE: return CUFFT_NVRTC_FAILURE; case CUFFT_NVJITLINK_FAILURE: return CUFFT_NVJITLINK_FAILURE; case CUFFT_NVSHMEM_FAILURE: return CUFFT_NVSHMEM_FAILURE;新增错误码的语义可以从命名推断MISSING_DEPENDENCY表示缺失运行时依赖NVRTC_FAILURE/NVJITLINK_FAILURE表示 cuFFT 内部通过 NVRTC 或 NVJITLINK 做 JIT 编译时失败NVSHMEM_FAILURE表示 NVSHMEM 相关路径失败。受影响示例为simpleCUFFT、simpleCUFFT_2d_MGPU、simpleCUFFT_MGPU、simpleCUFFT_callback四个 FFT 示例。2.4 CUDA 13.1 与 13.2CUDA 13.1仅小规模 bug 修复与增强无结构或功能变化属于低风险升级CUDA 13.2针对 MSVC 编译器新增-Xcompiler/Zc:preprocessor编译选项。根 CMakeLists.txt 中的实现如下作用是启用符合标准的预处理器以兼容 CUDA 13.2 的 CCCL——CHANGELOG 特别强调若继续使用传统预处理器会触发 MSVC/cl.exe with traditional preprocessor is used… 警告并最终导致构建错误# Add MSVC-specific flags for standard-conforming preprocessor (required for CCCL) if(MSVC) add_compile_options($$COMPILE_LANGUAGE:CUDA:-Xcompiler/Zc:preprocessor) endif()CUDA 13.2 (update)新增python/示例树并将Samples目录重命名为cpp同步更新了 CMakeLists.txt 与Common头文件中的路径引用。2.5 CUDA 13.3CUDA Tile C 与 CCCL 特性示例CUDA 13.3 新增两大示例群1CUDA Tile C 示例cpp/9_CUDA_Tile/官方 CUDA Tile C 库入门到进阶。根据 9_CUDA_Tile/README.md各示例定位如下示例技术要点helloTileTile 内核基础启动方式与 SIMT/Tile 内核间经全局内存传数据tileVectorAdd用cuda::tiles::partition_view将数据切分为 1024 元素块掩码加载/存储处理越界尾块tileTranspose分块矩阵转置块内加载→本地转置→写入目标位置tileMatmulFP16 输入 FP32 累加的cuda::tiles::mma矩阵乘对比朴素与优化实现并用 CUDA events 计时验证tileMatmulAutotuner基于 nvrtc/nvcc 的矩阵乘自动调优器tileBmm静态持久化批量矩阵乘BMM网格按 SM 数量启动固定数量的持久块tileLayerNorm/tileRope/tileSpMV/tileTranspose等算子级 Tile 实现2CCCL 3.3 特性示例cpp/4_CUDA_Libraries/这批示例通过 CPM 拉取 CCCL固定 v3.3.3可用CCCL_SOURCE_DIR覆盖cubDeviceFindcub::DeviceFind::FindIf、LowerBound、UpperBound设备级查找算法cubDeviceSegmentedScanExclusiveSegmentedSum与带自定义二元算子的InclusiveSegmentedScancubDeviceTransform操作符返回cuda::std::tuple的 N-to-Mcub::DeviceTransform::TransformlibcuxxRandomcuda::pcg64与cuda::std::philox4x32引擎驱动cuda/std/random中的均匀、正态、泊松、伯努利分布libcuxxMdspan通过cuda::to_device_mdspan/cuda::to_dlpack_tensor实现 DLPack 与cuda::std::mdspan互转并提供cuda::shared_memory_mdspan对共享内存建立多维视图。3cuda.compute 1.0 Python 示例python/2_CoreConcepts/cudaComputeLambdas与binarySearch两个示例。根据 cudaComputeLambdas/README.mdcuda.compute来自cuda-cccl包接受纯 Python 可调用对象含 lambda作为算子内部通过 Numba 将算子 JIT 编译为 LTO-IR 供设备端执行覆盖reduce_into、unary_transform、inclusive_scan三类算法族binarySearch则演示并行的upper_bound/lower_bound并用numpy.searchsorted校验结果。硬件要求 Compute Capability 7.0软件要求 CUDA Toolkit 13.0 与 Python 3.10。三、CUDA 12.x工程化改造与示例清理3.1 CUDA 12.8全面迁移到 CMakeCUDA 12.8 是工程层面的分水岭仓库构建系统统一为 CMake移除了 Visual Studio 工程文件与 Makefile。根 CMakeLists.txt 展示了当前构建配置要点cmake_minimum_required(VERSION 3.20)project声明 C/CXX/CUDA 三种语言find_package(CUDAToolkit REQUIRED)C 与 CUDA 均使用 C17 标准CMAKE_CUDA_ARCHITECTURES默认覆盖 75/80/86/87/89/90/100/110/120 多个架构默认追加-lineinfo便于调试工具使用ENABLE_CUDA_DEBUG时改用-G启用 cuda-gdb全局开启--extended-lambda并MSVC 下追加/Zc:preprocessor。3.2 CUDA 12.8过时示例清理清单CHANGELOG 明确列出了被移除的示例及其理由对评估旧教程代码有直接参考价值目录移除示例移除理由0_Introductionc11_cuda过时concurrentKernels过时cppIntegration过时cppOverload过时simpleSeparateCompilation过于简单simpleTemplates_nvrtc与simpleTemplates冗余simpleVoteIntrinsics_nvrtc与simpleVoteIntrinsics冗余2_Concepts_and_TechniquescuHook与现代glibc不兼容4_CUDA_LibrariesbatchedLabelMarkersAndLabelCompressionNPP库中部分功能被移除5_Domain_SpecificfluidsD3D9、simpleD3D9、simpleD3D9Texture、simpleD3D10、simpleD3D10RenderTarget、simpleD3D10Texture、SLID3D10Texture、VFlockingD3D10遗留 Direct3D 9/10 互操作示例8_Platform_Specific/Tegranbody_screen、simpleGLES_screen暂移出待 QNX 更新同一版本还把 12 个 Tegra 专属示例EGLSync_CUDAEvent_Interop、cuDLAErrorReporting、cuDLAHybridMode、cuDLALayerwiseStatsHybrid、cuDLALayerwiseStatsStandalone、cuDLAStandaloneMode、cudaNvSciBufMultiplanar、cudaNvSciNvMedia、fluidsGLES、nbody_opengles、simpleGLES、simpleGLES_EGLOutput统一迁入 8_Platform_Specific/Tegra。3.3 CUDA 12.9测试工具与代码格式化CUDA 12.9 的主要变化包括新增 run_tests.py 工具用于批量执行全部示例详情见 README.md脚本支持并发执行、线程安全输出并将豁免waived测试的退出码约定为 2全仓库统一代码格式移除已过时且结果不准确的bandwidthTest官方建议改用 NVBandwidth 工具更新 Tegra Linux 交叉编译工具链。3.4 CUDA 12.0 ~ 12.5 关键新增CUDA 12.0新增 JIT 编译相关 flag移除 Hopper 架构中的弃用 APICUDA 12.1新增 Large Kernel 示例cpp/6_Performance/LargeKernelParameter/CUDA 12.2libNVVM 示例更新修复jitLto案例问题为 GCC 启用未经充分测试的HOST_COMPILER选项CUDA 12.3新增 cuDLA 系列示例修复jitLto回归CUDA 12.4新增 graphConditionalNodes条件图节点示例。四、CUDA 11.x目录重构与示例爆发期4.1 CUDA 11.0~11.6 代表性新增CUDA 11.x 是新增示例最多的时期CHANGELOG 记录的核心新增包括Tensor Core 矩阵乘AmpereCUDA 11.0dmmaTensorCoreGemm双精度 WMMA、bf16TensorCoreGemm__nv_bfloat16、tf32TensorCoreGemmtf32全部基于 Ampere 芯片家族张量核心协作组Cooperative GroupsCUDA 11.0warpAggregatedAtomicsCGwarp 聚合原子操作CC 7.0、binaryPartitionCG二分分区与块内归约、reduction新增reduce_add_sync与cooperative_groups::reduce两个新内核异步拷贝与屏障CUDA 11.0globalToShmemAsyncCopyCC 8.0 全局到共享内存异步拷贝、simpleAWBarrierarrive-wait 屏障流顺序内存分配CUDA 11.2streamOrderedAllocation、streamOrderedAllocationP2P演示cudaMallocAsync与cudaMemPoolAPI 族图内存节点CUDA 11.5graphMemoryNodes图内内存分配/释放、graphMemoryFootprint虚拟地址与物理内存复用cuDLA 系列CUDA 11.5cuDLAHybridMode、cuDLAStandaloneMode、cuDLAErrorReporting其他cudaOpenMP多 GPU OpenMP11.1、simpleZeroCopy零拷贝11.1、watershedSegmentationNPP分水岭分割11.1、simpleCUBLAS_LU批量 LU 分解11.3、cdpQuadtreeCUDA Dynamic Parallelism 四叉树11.4、simpleVulkan/simpleVulkanMMAP/vulkanImageCUDA的 SPIR-V 与时间线信号量更新11.4、cudaNvSciNvMediaNvSciBuf/NvSciSync 互操作11.2。4.2 CUDA 11.5/11.6 工程与分发变化CUDA 11.5CUDA Toolkit 中的全部示例迁移至 GitHub 发布CUDA 11.6新增示例目录结构即当前的cpp/0_Introduction~8_Platform_Specific框架全部 Windows 示例支持 Visual Studio 2022CUDA Samples 不再随 CUDA Toolkit 分发仅通过 GitHub 获取CUDA 11.4新增 Linux 平台 VS Code 支持CUDA 11.2Windows 端放弃 Visual Studio 2015FreeImage 不再随示例分发Windows 参见 README.md 的 Dependencies 章节Linux 推荐使用发行版包管理器安装全部示例支持nvcc --threads并行构建Pipeline 与 arrive-wait 屏障示例统一迁移到新的cuda::pipeline/cuda::barrier接口。五、CUDA 10.x库互操作与图 API 奠基CUDA 10.x 的示例为后续版本奠定了基础代表性新增包括CUDA Graphs10.0simpleCudaGraphs图的创建/实例化/启动、conjugateGradientCudaGraphscuBLAS/cuSPARSE 调用捕获进图互操作10.0/10.1simpleVulkan、simpleD3D12、vulkanImageCUDA、EGLStream_CUDA_Interop、simpleD3D11外部资源互操作 Keyed Mutex 同步、simpleDrvRuntimeDriver 与 Runtime API 协同加载 fatbinary内存映射10.2vectorAddMMAP、memMapIPCDrv演示cuMemMap物理属性指定与 IPCNPP/cuSolver/cuRAND10.1~10.2boxFilterNPP、cannyEdgeDetectorNPP、watershedSegmentationNPP10.1 Update 1、cuSolverDn_LinearSolver、cuSolverSp_LinearSolverLU/QR/Cholesky 分解、MersenneTwisterGP11213、nvJPEG/nvJPEG_encoder性能与系统10.0/10.1p2pBandwidthLatencyTest、UnifiedMemoryPerf、systemWideAtomics、reduction数据并行优化策略集合平台支持10.1 Update 1 起支持 Visual Studio 201910.0 起放弃 Visual Studio 2010。六、CUDA 9.2GitHub 首版与长期保留的经典示例CUDA 9.2 是 CUDA Samples 在 GitHub 的首个发布版本CHANGELOG 列出的首批示例中相当一部分至今仍保留在仓库中如matrixMul、simpleCUBLAS、simpleCUFFT、deviceQuery另一些则演变为后续示例的源头入门类vectorAdd_nvrtcNVRTC 运行时编译、deviceQuery设备属性枚举矩阵乘matrixMul共享内存分块、matrixMulDrvDriver API 版本、cudaTensorCoreGemmVolta 张量核心 WMMA同步原语CUDA 9.0 引入的_sync版本simpleVoteIntrinsicsvote intrinsics、shfl_scanshuffle intrinsics协作组与求解器conjugateGradientMultiBlockCG、conjugateGradientMultiDeviceCG多设备协作组 统一内存预取与使用提示 API库示例simpleCUBLASGEMM、simpleCUFFTFFT。从源码看部分 9.2 时代的示例至今仍在随新 API 演进例如 segmentationTreeThrust/segmentationTree.cu 中的thrust::copy_if谓词已在 CUDA 13.0 从弃用的thrust::identityuint()迁移为cuda::std::identity()thrust::copy_if(thrust::make_counting_iterator(0U), thrust::make_counting_iterator(validEdgesCount), dEdgesFlags, dVertices_, cuda::std::identity()) .get();七、升级指引从 CHANGELOG 反推迁移清单7.1 跨版本 API 迁移速查表APICUDA 13.0 变化受影响示例cudaDeviceProp.clockRate等 5 个字段改查cudaDeviceGetAttributedeviceQuery等 10 余个cuCtxCreate新增CUctxCreateParams参数cuCtxCreate_v4matrixMulDrv、nvrtc_helper.h等 15 处cudaGraphAddNode/cudaStreamGetCaptureInfo新增cudaGraphEdgeData参数_v2/_v3graphConditionalNodescudaMemAdvise/cudaMemPrefetchAsyncint device→cudaMemLocationconjugateGradientMultiDeviceCG、UnifiedMemoryPerfthrust::identityuint()替换为cuda::std::identity()segmentationTreeThrustcuFFT 错误码弃用 3 个、新增 4 个helper_cuda.h与 4 个 FFT 示例7.2 构建与分发注意事项构建系统CUDA 12.8 起仅支持 CMake最低 3.20Visual Studio 工程与 Makefile 已移除MSVC 用户CUDA 13.2 起必须开启-Xcompiler/Zc:preprocessor否则 CCCL 相关代码直接构建失败Windows 依赖FreeImage 自 CUDA 11.2 起不再随示例分发需按 README.md 的 Dependencies 章节手动配置Python 示例不纳入 CMake 构建按示例目录内的 requirements.txt 安装依赖后独立运行Tegra 交叉编译CUDA 12.9/13.0 持续更新 Tegra Linux/QNX 交叉编译工具链相关配置见 cmake/toolchains/示例获取方式自 CUDA 11.6 起CUDA Samples 仅通过 GitHub 仓库分发不再随 CUDA Toolkit 附带。八、结语将 CHANGELOG 用作学习路线图CHANGELOG.md 的价值不仅在于发生了什么更在于它本身就是一份按版本组织的 CUDA 特性路线图想学习 Tensor Core WMMA看 CUDA 9.2/10.1/11.0 的*TensorCoreGemm系列想理解 CUDA Graphs 的完整演进串联 CUDA 10.0 的simpleCudaGraphs、11.5 的图内存节点、12.4 的条件图节点与 13.3 的图性能缩放示例想掌握最新的 Tile 编程模型与 CCCL 算法库则直接研读 CUDA 13.3 新增的 9_CUDA_Tile 与 4_CUDA_Libraries 示例群。在升级 CUDA Toolkit 前对照本文的迁移速查表逐一检查受影响的示例与公共头文件可以显著降低构建与运行时的兼容性风险。【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考