ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CUDA Samples 实战上手:一条命令链跑通第一个 CUDA 示例

CUDA Samples 实战上手:一条命令链跑通第一个 CUDA 示例 CUDA Samples 实战上手一条命令链跑通第一个 CUDA 示例【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samplesNVIDIA CUDA Samples 是 CUDA Toolkit 官方配套的示例代码集合当前版本对应 CUDA Toolkit 13.3每个示例都对应一个具体的 GPU 编程技巧或库调用。假设你刚装好 CUDA、想确认我的卡能不能跑、跑起来长什么样这份指南带你从装环境一路走到看懂第一个 kernel。一、最短路径装好环境并跑通 vectorAdd✅ 整条链路是装 Toolkit → 验证版本 → CMake 构建 → 运行第一个示例四步走完大约十分钟。第 1 步确认系统要求并安装 CUDA Toolkit一张支持 CUDA 的 NVIDIA GPUSM 5.0及以上架构各示例 README 里都有标注Linux 或 Windows外加 CMake3.20 及以上根目录CMakeLists.txt第一行写死了这个要求从 NVIDIA 官网下载对应平台的 CUDA Toolkit 安装包装完在终端跑一下nvcc --version应输出编译器版本号例如 13.3能看到版本号就对了。第 2 步拿到代码git clone https://gitcode.com/GitHub_Trending/cu/cuda-samples cd cuda-samples第 3 步CMake 构建仓库用 CMake 组织find_package(CUDAToolkit REQUIRED)会自动去找你装的 Toolkit所以通常一条配置命令就够了mkdir build cd build cmake .. make -j$(nproc)Windows 上则用 VS 附带的 x64 Native Tools 命令行先cmake .. -G Visual Studio 16 2019 -A x64生成CUDA_Samples.sln再拖进 Visual Studio 编译。第 4 步运行第一个示例按 README 的说法示例从 build 目录下的对应子目录运行cd .. ./build/0_Introduction/vectorAdd/vectorAdd看到Test PASSED和Done两行说明驱动、Toolkit、示例三方全部就绪 。这个示例做的是 5 万个元素的向量加法C A B并逐项核对结果。补充只想验证机器而不编译build/1_Utilities/deviceQuery/deviceQuery可以枚举本机所有 CUDA 设备的属性是排查为什么跑不起来的第一站。二、项目地图速览什么场景看哪个目录不用逐个目录翻先按你现在要干什么对号入座目录放什么什么时候该看cpp/0_Introduction/vectorAdd、matrixMul、流、纹理、统一内存等基础示例入门第一站建议按目录顺序过一遍cpp/1_Utilities/deviceQuery、topologyQuery想了解本机 GPU 能力、多卡拓扑时cpp/2_Concepts_and_Techniques/归约、直方图、线程栅栏、Cooperative Groups 归约等学归约怎么做直方图怎么并行这类通用技巧时cpp/3_CUDA_Features/CUDA Graphs、动态并行、张量核心 GEMMbf16/tf32/imma 等探索新硬件/新 API 特性时cpp/4_CUDA_Libraries/cuBLAS、cuFFT、cuSOLVER、NPP、nvJPEG 等库调用要落地项目、不想手写 kernel 时cpp/5_Domain_Specific/图像处理、金融定价、分子动力学、体积渲染等按自己的业务领域直接定位cpp/6_Performance/矩阵转置优化、内存对齐、图性能扩展性能调优阶段cpp/7_libNVVM/libNVVM / NVVM IR 编译链做 JIT 编译、自定义编译流程时cpp/8_Platform_Specific/Tegra/Tegra 平台专用需-DBUILD_TEGRATrue才构建在 Tegra 设备开发时cpp/9_CUDA_Tile/CUDA Tile C 新编程模型示例关注新一代 Tile 编程模型时python/基于 cuda.core 的 Python 示例不随 CMake 构建你用 Python 而不是 C 写 GPU 代码时Common/helper_cuda.h 等公共工具读示例源码遇到 helper 函数时Python 示例单独跑进入对应目录后pip install -r requirements.txt再python 脚本.py需要 Python 3.10。三、精选示例走读vectorAdd一次看清 CUDA 程序的完整骨架代码在 cpp/0_Introduction/vectorAdd/vectorAdd.cu不到 200 行但覆盖了内存拷贝 → 启动 kernel → 结果校验的全部环节第 47~54 行__global__kernelblockDim.x * blockIdx.x threadIdx.x算全局索引越界检查后做加法——这是所有 CUDA kernel 的通用开头第 92~128 行cudaMalloc分配显存、cudaMemcpy把输入拷上卡第 136~139 行算块数后vectorAddblocksPerGrid, threadsPerBlock(...)启动第 158~163 行用 CPU 逐项核对误差是否小于 1e-5运行后终端会依次打印拷贝输入数据 → 启动 kernel多少块、每块多少线程→ 拷贝结果最后Test PASSED。把这个流程背下来后面所有示例都是它的变体。matrixMul共享内存 tiling 的标准写法cpp/0_Introduction/matrixMul/matrixMul.cu 演示的是 CUDA 编程指南共享内存一节同款实现核心技巧是 tiling第 58 行kernel 用模板参数BLOCK_SIZE控制分块大小第 92~96 行声明__shared__数组As、Bs第 101~105 行每个线程从全局内存搬一个元素进共享内存__syncthreads()等待整块就绪第 110~114 行在内层循环里只做共享内存上的乘累加作者特意说明这是为讲解清晰度写的不是性能最优 GEMM——同一目录下的matrixMulCUBLAS在cpp/4_CUDA_Libraries/会额外用 cuBLAS 跑一次对照运行这个示例能同时看到手写 kernel 和库实现的耗时对理解手写 vs 调库的差距非常直观。nvJPEGGPU 解 JPEG 要多少行cpp/4_CUDA_Libraries/nvJPEG/ 演示单张与批量 JPEG 解码是深度学习数据加载里常见的一环。这类示例的共同点主代码很短重点在库 API 的初始化与流式调用适合你确认这个库在 CUDA Samples 里的标准用法之后再回头套到自己的 pipeline 上。四、编译与运行踩坑问答⚠️ 每条都是仓库实际会遇到的情况按现象 → 原因 → 解法处理现象原因一条解法CMake 配置时报CMake 3.20 or higher is required系统 CMake 太老用包管理器升级如sudo apt install cmake后重新 configure配置时报找不到 CUDAToolkitToolkit 没装好或不在标准路径先跑nvcc --version确认装了还找不到就把-DCMAKE_CUDA_COMPILER/usr/local/cuda/bin/nvcc传给 cmake某个示例构建时消失了没报错也没产物示例检测到缺少第三方依赖会自行跳过如 FreeImage、MPI、Vulkan按示例 README 的 Dependencies 装对应库重新 configure运行时提示检测不到 CUDA 设备驱动未装/版本过旧跑deviceQuery它连不上设备时输出里会指明原因升级驱动新 Toolkit13.0配老驱动550-编译/运行不一致前向兼容场景配置时加-DCMAKE_PREFIX_PATH/usr/local/cuda/lib64/stubs/ ..用 clang 构建的 OpenMP 示例运行报libomp.so: cannot open动态链接器找不到运行时库把libomp.so所在目录加入LD_LIBRARY_PATH想在 GPU 上单步调试编译后程序明显变慢-G会禁用部分优化README 明确提示用cmake -DENABLE_CUDA_DEBUGTrue ..只在调试期开启平时构建走默认的-lineinfo不影响性能且保留行号信息想批量回归所有示例手动逐个跑不现实仓库自带脚本python3 run_tests.py --output ./test --dir ./build/cpp --config test_args.json全过会打印All test runs passed!五、进阶工具箱速查调优技巧对照cpp/6_Performance/看代码技巧去哪看共享内存 tiling0_Introduction/matrixMul、6_Performance/transpose含白皮书 doc/MatrixTranspose.pdf内存对齐与访问模式6_Performance/alignedTypes流优先级 / 流上有序分配3_CUDA_Features/StreamPriorities、2_Concepts_and_Techniques/streamOrderedAllocation归约的不同写法对比2_Concepts_and_Techniques/reduction、threadFenceReduction、reductionMultiBlockCG调试手段普通构建自带-lineinfo调试工具能拿到行号需要 cuda-gdb 上 GPU 断点时加-DENABLE_CUDA_DEBUGTrue重新构建结果对不对不确定示例里大量使用CPU 参考实现 逐项比对的写法如 vectorAdd 的 1e-5 误差校验照抄这套模式到你的项目典型落地领域图像处理5_Domain_Specific下的 SobelFilter、bilateralFilter、imageDenoising、金融定价BlackScholes、binomialOptions、数值求解4_CUDA_Libraries/conjugateGradient*系列、张量核心加速3_CUDA_Features下 bf16/tf32/imma/dmma 四个 GEMM。六、下一步清单刚跑通本周把0_Introduction里剩下的示例逐个跑一遍重点读simpleStreams和UnifiedMemoryStreams运行matrixMul对比它打印的 CUDA 版与 cuBLAS 版耗时会 Python 的话跑一个python/1_GettingStarted/vectorAdd感受 cuda.core 的写法想深入本月手写技巧精读2_Concepts_and_Techniques的 reduction、scan、histogram尝试改参数观察吞吐变化新特性从3_CUDA_Features/jacobiCudaGraphs入手理解 CUDA Graphs再看张量核心 GEMM 系列多卡0_Introduction/simpleMultiGPU→5_Domain_Specific/p2pBandwidthLatencyTest实测 P2P 带宽要落地上项目前用4_CUDA_Libraries确认你的 workload 里 cuBLAS/cuFFT/cuSOLVER/NPP 哪些能直接替代手写 kernel用run_tests.py在你自己的机器上建一个基线后续升级 Toolkit 时用它回归调优时以6_Performance的写法为参照用事件计时cudaEventElapsedTimematrixMul 里就有完整示例量化每次改动照着这条路径走先让Test PASSED出现再按场景挑目录最后把库示例套进自己的业务——CUDA Samples 的每个 README 都标注了依赖的 API 和支持的架构卡住时它比搜索引擎更靠谱。【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表