news 2026/9/18 3:28:30

CUDA Samples 快速上手指南:在自己机器上跑通第一个 GPU 示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CUDA Samples 快速上手指南:在自己机器上跑通第一个 GPU 示例

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_GettingStarted2_CoreConcepts3_FrameworkInterop(PyTorch/TensorFlow 互操作)、4_DistributedComputing(多 GPU 与 IPC)。

这些 Python 示例不走 CMake 构建,直接进目录跑:

cd python/1_GettingStarted/vectorAdd pip install -r requirements.txt python vectorAdd.py

requirements.txt里钉住了cuda-python>=13.0.0cupy-cuda13xnumpy>=2.3.2,要求 Python 3.10 以上。vectorAdd.py用字符串形式写出 kernel 源码,运行时编译并启动向量加法核,跑完会打印 C = A + B 的校验结果,对习惯脚本写法的同学来说门槛最低。

遇到编译报错,先看这三处

nvcc 找不到。CMakeLists.txt里有一行find_package(CUDAToolkit REQUIRED),找不到就停在配置阶段。先确认/usr/local/cudaPATH里;如果你的场景是新 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下的simpleGLbilateralFilter这类示例依赖 OpenGL、Freeglut、GLEW,部分还需要显示器输出,无图形界面的服务器上会直接失败,这属于预期行为。

跑起来之后怎么读:以 vectorAdd 为例

读源码建议从 cpp/0_Introduction/vectorAdd/ 开始,它就是这个仓库版的"Hello World":cudaMalloc分配设备内存,cudaMemcpy拷入向量 A 和 B,按元素各起一个线程计算 C = A + B,结果拷回主机后与 CPU 结果比对。该目录的README.md列出了用到的全部 API:cudaMemcpycudaGetErrorStringcudaFreecudaGetLastErrorcudaMalloc

想写自己的代码时,把整个目录拷走,只改 kernel 内部逻辑,保留"分配 → 拷贝 → 启动 → 校验"的骨架即可。Common/目录里的helper_cuda.hnvVector.h等工具头文件已被各示例引用,可以直接复用。

下一步:按目录挑你要的主题

cpp/目录分成 9 段编号:2_Concepts_and_Techniques里有reductionscanconvolutionTexturedct8x8等经典手法;3_CUDA_Features集中了 Tensor Core GEMM(cudaTensorCoreGemm等 4 种精度)、CUDA Graphs、CDP 设备侧启动;4_CUDA_Libraries是库的用法参考,如cubDeviceFindnvJPEGsimpleCUFFT5_Domain_Specific则给出完整应用,比如bilateralFilter(下图即其输入图片,滤波后边缘保持得更好)、marchingCubesnbody

想批量验证所有示例是否都能跑通,仓库根目录提供了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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 3:28:24

Postman接口文档流水线:构建可验证、可追溯的API契约

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 3:26:32

12种工控协议学习路线:从Modbus到OPC UA的实战复盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 3:25:19

自然语言与编程语言的协议对齐检测器

1. 这不是语言学论文&#xff0c;而是一次硬核工程突围“自然语言是协议&#xff0c;编程也是协议”——这句话乍听像哲学思辨&#xff0c;但放在我们这个项目里&#xff0c;它就是一句实打实的操作指令。我们没写论文&#xff0c;没发顶会&#xff0c;也没堆模型参数&#xff…

作者头像 李华
网站建设 2026/9/18 3:23:47

教育中的心理效应:把认知规律变成可落地的系统配置

简介&#xff1a;《教育中的心理效应》&#xff08;第二版&#xff09;的PDF电子资料&#xff0c;聚焦教学、教育与管理中的常见心理效应&#xff0c;旨在帮助教师、班主任、家长以及对教育心理学感兴趣的读者理解心理规律&#xff0c;改进教学与亲子沟通方式。这份资料基于原著…

作者头像 李华
网站建设 2026/9/18 3:23:34

ASP.NET Core中间件与请求管道:从原理到实战全解析

刚在调试一个接口慢查询&#xff0c;发现耗时全卡在一个不起眼的中间件里&#xff0c;这让我又一次体会到&#xff1a;ASP.NET Core 里最容易被低估、也最容易出问题的&#xff0c;就是中间件与请求管道。这个09-中间件与请求管道的主题&#xff0c;我在面试里问过不少人&#…

作者头像 李华