NVIDIA CUDA Samples保姆级实战手册:5分钟跑通第一个GPU并行计算示例
【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samples
想让GPU替你干活,多数人卡在同一关:CUDA编程模型里的"线程块"到底怎么对应硬件?kernel写出来怎么保证跑对?NVIDIA CUDA Samples是CUDA Toolkit官方自带的示例集,200多个GPU并行计算样例覆盖图像处理、线性代数、金融计算等场景,每个都配README说明概念和依赖,是"读官方实现"学CUDA性价比最高的路径。
5分钟跑通:装环境、构建、运行vectorAdd 🚀
前置两件事:装好CUDA Toolkit(本仓库对齐13.x版本),用nvcc --version确认能输出版本号;再装CMake 3.20及以上。然后克隆仓库:
git clone https://gitcode.com/GitHub_Trending/cu/cuda-samples在仓库根目录配置并构建:
mkdir build && cd build cmake .. make -j$(nproc)顶层 CMakeLists.txt 已默认覆盖SM 75到120的多架构编译。个别样例缺第三方依赖(FreeImage、Vulkan等)时会自动跳过,不阻塞整体构建。构建完成后,在build/cpp/下找到vectorAdd可执行文件直接运行,看到Test PASSED,就是跑通了你的第一个GPU并行计算。Windows用户可用VS打开生成的CUDA_Samples.sln直接编译。想用cuda-gdb在GPU上调试,cmake时加-DENABLE_CUDA_DEBUG=True重建即可(会明显降速,生产构建别开)。
目录地图:先看不看,一张表说清 🗺️
| 目录 | 内容 | 建议 |
|---|---|---|
| cpp/0_Introduction/ | vectorAdd、matrixMul、stream、共享内存等基础 | 建议最先看 |
| cpp/1_Utilities/ | deviceQuery等硬件查询工具 | 先跑一遍摸清楚自己的卡 |
| cpp/2_Concepts_and_Techniques/ | reduction、scan、histogram、DCT等经典技巧 | 进阶核心 |
| cpp/3_CUDA_Features/ | CUDA Graphs、Tensor Core、动态并行 | 追新特性 |
| cpp/4_CUDA_Libraries/ | cuBLAS、cuFFT、NPP、nvJPEG实战 | 直接用库的看这里 |
| cpp/5_Domain_Specific/ | 图像处理、金融、科学计算 | 应用向开发 |
| cpp/6_Performance/ | transpose、统一内存等性能对比 | 调优参考 |
| cpp/9_CUDA_Tile/ | 最新CUDA Tile C++模型 | 前沿必读 |
| python/ | cuda.core Python示例,不走CMake构建 | 直接用python跑 |
每个目录下还有一级README,是更细的样例索引。
精选示例深拆:看官方怎么写kernel 🔍
vectorAdd:数据流的最小完整形态。解决什么问题:两个向量逐元素相加。它是GPU编程的"Hello World",完整演示"主机分配→拷到设备→启动kernel→拷回→校验"闭环。关键是kernel里的grid-stride循环写法:每个线程按步长负责一段下标,向量无论多长代码都正确,后面所有kernel都套这个模板。代码在 cpp/0_Introduction/vectorAdd/。
matrixMul:共享内存分块 vs cuBLAS。同一个矩阵乘法给了两套实现:手写共享内存tiling展示"把数据搬得快"的原理;另一套直接调cuBLAS展示"官方库能快多少"。计时部分用cudaEvent包kernel,是测量GPU耗时的事实标准。建议先读手写版懂原理,再看cuBLAS版学调用。代码在 cpp/0_Introduction/matrixMul/。
DCT 8x8:GPU上做图像压缩。解决什么问题:JPEG编码核心步骤——8x8块离散余弦变换,每个像素块由一个线程块并行处理。样例用到的余弦基函数如下图所示,每个子图对应一个频率分量:
它还提供标准版、短代码版、量化版多种kernel写法,可以对比不同实现风格对可读性和性能的影响。代码在 cpp/2_Concepts_and_Techniques/dct8x8/。
进阶能力解锁:基础打牢后往哪走 ⚡
- Tensor Core GEMM:cpp/3_CUDA_Features/ 下bf16、tf32、imma、dmma系列样例,演示低精度矩阵乘加速深度学习负载
- CUDA Graphs:simpleCudaGraphs和jacobiCudaGraphs展示"一次录制kernel序列、多次重放",砍掉CPU反复launch的开销
- 多GPU:simpleMultiGPU、p2pBandwidthLatencyTest演示P2P访问与带宽实测
- NVRTC运行时编译:部分样例在运行期编译kernel源码,适合插件化架构
- Python线:python/1_GettingStarted/ 用cuda.core在Python里做运行时编译和kernel启动,不进CMake构建,进样例目录装requirements.txt后直接跑脚本
生产实战:从示例到工程落地 📌
场景一:GPU环境批量验收。仓库自带 run_tests.py,按 test_args.json 的配置递归查找构建产物并逐个执行,最后输出通过/失败清单。机器验收或CI里直接这样跑:
python3 run_tests.py --output ./test --dir ./build/cpp --config test_args.json场景二:GPU加速图像管线。典型链路是"nvJPEG解码→滤波处理→DCT压缩"。下图是nvJPEG样例里的实拍输入照片,由GPU硬件加速解码后交给下游处理:
解码看 cpp/4_CUDA_Libraries/nvJPEG/,滤波实现看 cpp/5_Domain_Specific/bilateralFilter/。样例没覆盖、需要自己补的:日志、异常兜底、批处理、多流并发下的负载控制。
高频问题速查
| 现象 | 原因与解法 |
|---|---|
| cmake报找不到CUDAToolkit | 没装CUDA Toolkit或环境变量没生效,先nvcc --version自查 |
| 构建时大量样例被跳过 | 缺FreeImage/Freeglut/Vulkan/MPI等第三方依赖,样例自动waive,装齐依赖后重新cmake |
| 老显卡报"不支持" | 每个样例README都列了支持的SM架构,是硬件不支持,不是bug |
| 想上GPU调kernel | cmake加-DENABLE_CUDA_DEBUG=True重建,再用cuda-gdb |
| 想改安装位置 | cmake时指定-DCMAKE_INSTALL_PREFIX,默认build/bin/下按架构/系统/构建类型分层 |
学习路线:三档行动清单 📚
- 入门(1-3天):跑通vectorAdd和matrixMul,用deviceQuery查自己GPU的算力与显存,吃透"malloc→memcpy→kernel"三步数据流
- 进阶(1-2周):把 cpp/2_Concepts_and_Techniques/ 的reduction、scan、histogram逐个过一遍,重点看共享内存复用与合并访存写法
- 精通(长期):CUDA Graphs、Tensor Core GEMM、多GPU P2P、NVRTC,最后看CUDA Tile与Python线的新编程模型
延伸阅读
- 每个样例目录的README.md:概念、涉及的CUDA API、支持架构与依赖说明,是最权威的"样例文档"
- CHANGELOG.md:仓库版本与修订历史
- cpp/ 各一级目录下的README.md:分主题的样例索引
- 根 README.md 的Dependencies章节:第三方依赖与CUDA特性支持一览
【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samples
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考