CUDA Samples 快速上手指南:在自己机器上跑通第一个 GPU 示例
【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samples
CUDA Samples 是 NVIDIA 官方的开源示例代码库,当前版本配套 CUDA Toolkit 13.3,包含 100 多个 C++ 示例和 30 个 Python 示例,覆盖 kernel 编写、纹理内存、多 GPU 通信等主题。这篇文章按"编译 → 运行 → 改造"的顺序带你把示例跑起来,再挑一个典型例子讲怎么读、怎么改成自己的代码。
第一步:三条命令在 Linux 上完成构建
前提只有两个:装好 CUDA Toolkit(终端执行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里把CMAKE_CUDA_ARCHITECTURES固定为75 80 86 87 89 90 100 110 120,也就是说默认只为这些 SM 版本生成 kernel,编译时间不会太长。Windows 上则在 Visual Studio 自带的 "x64 Native Tools Command Prompt" 里执行cmake .. -G "Visual Studio 16 2019" -A x64,再打开生成的CUDA_Samples.sln按 F7 构建。
构建完成后,可执行文件散落在build/cpp/<分类>/<示例名>/下;执行make install会把它们集中到build/bin/x64/linux/release。
构建完成后,先跑 deviceQuery
第一个要运行的程序是 cpp/1_Utilities/deviceQuery/。它调用 Driver API 的cuDeviceGetAttribute和 Runtime API 的cudaGetDeviceProperties,枚举系统里所有支持 CUDA 的 GPU,打印设备名、显存大小、计算能力、时钟频率等属性。
./build/cpp/1_Utilities/deviceQuery/deviceQuery正常的输出末尾会出现类似cudaGetLastError() after cudaDeviceReset = no error的字样,说明你的驱动和运行时都能正常工作。如果程序启动即报错,通常是显卡驱动版本低于 Toolkit 要求,先升级驱动再谈编译问题。
不想编译 C++?试试 Python 示例
从 CUDA 13.2 版本开始,仓库新增了一棵python/目录树,共 30 个示例,基于cuda.core(CUDA Python)编写,分四类:1_GettingStarted、2_CoreConcepts、3_FrameworkInterop(PyTorch/TensorFlow 互操作)、4_DistributedComputing(多 GPU 与 IPC)。
这些 Python 示例不走 CMake 构建,直接进目录跑:
cd python/1_GettingStarted/vectorAdd pip install -r requirements.txt python vectorAdd.pyrequirements.txt里钉住了cuda-python>=13.0.0、cupy-cuda13x、numpy>=2.3.2,要求 Python 3.10 以上。vectorAdd.py用字符串形式写出 kernel 源码,运行时编译并启动向量加法核,跑完会打印 C = A + B 的校验结果,对习惯脚本写法的同学来说门槛最低。
遇到编译报错,先看这三处
nvcc 找不到。根CMakeLists.txt里有一行find_package(CUDAToolkit REQUIRED),找不到就停在配置阶段。先确认/usr/local/cuda在PATH里;如果你的场景是新 Toolkit 配旧驱动(如 13.0 工具配 550 以下内核驱动),按 README 的说法加上-DCMAKE_PREFIX_PATH=/usr/local/cuda/lib64/stubs/使用 forward compatibility 模式。
单个示例失败、其余正常。用make -j$(nproc) --ignore-errors继续构建,日志里能看到具体哪个目录挂了;也可以按 README 的示例,把父级CMakeLists.txt里对应的add_subdirectory行注释掉跳过。
依赖库缺失。5_Domain_Specific下的simpleGL、bilateralFilter这类示例依赖 OpenGL、Freeglut、GLEW,部分还需要显示器输出,无图形界面的服务器上会直接失败,这属于预期行为。
跑起来之后怎么读:以 vectorAdd 为例
读源码建议从 cpp/0_Introduction/vectorAdd/ 开始,它就是这个仓库版的"Hello World":cudaMalloc分配设备内存,cudaMemcpy拷入向量 A 和 B,按元素各起一个线程计算 C = A + B,结果拷回主机后与 CPU 结果比对。该目录的README.md列出了用到的全部 API:cudaMemcpy、cudaGetErrorString、cudaFree、cudaGetLastError、cudaMalloc。
想写自己的代码时,把整个目录拷走,只改 kernel 内部逻辑,保留"分配 → 拷贝 → 启动 → 校验"的骨架即可。Common/目录里的helper_cuda.h、nvVector.h等工具头文件已被各示例引用,可以直接复用。
下一步:按目录挑你要的主题
cpp/目录分成 9 段编号:2_Concepts_and_Techniques里有reduction、scan、convolutionTexture、dct8x8等经典手法;3_CUDA_Features集中了 Tensor Core GEMM(cudaTensorCoreGemm等 4 种精度)、CUDA Graphs、CDP 设备侧启动;4_CUDA_Libraries是库的用法参考,如cubDeviceFind、nvJPEG、simpleCUFFT;5_Domain_Specific则给出完整应用,比如bilateralFilter(下图即其输入图片,滤波后边缘保持得更好)、marchingCubes、nbody。
想批量验证所有示例是否都能跑通,仓库根目录提供了run_tests.py,配合test_args.json里的参数配置:
python3 run_tests.py --dir ./build/cpp --config test_args.json --output ./test --parallel 8现在你可以做的三件事:跑一遍deviceQuery确认驱动正常;把vectorAdd拷一份,把加法改成你要的运算;然后从2_Concepts_and_Techniques里挑一个和你项目最接近的示例开始读源码。
【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samples
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考