ARTICLE DETAIL

资讯详情

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

CUDA 示例实战指南:如何跑通 NVIDIA 官方 GPU 编程代码

CUDA 示例实战指南:如何跑通 NVIDIA 官方 GPU 编程代码 CUDA 示例实战指南如何跑通 NVIDIA 官方 GPU 编程代码【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samplesCUDA Samples是 NVIDIA 官方维护的 CUDA Toolkit 示例代码库收录了几百个可直接编译运行的 GPU 编程示例。它适合两类人第一次接触 CUDA、想把第一个内核跑起来的初学者以及有一定基础、需要查某个技术点标准写法的工程师。三个场景看看它能不能帮你场景一第一次写 GPU 程序。你装好了 CUDA Toolkit但不知道一个内核到底该怎么写、数据怎么从 CPU 搬到 GPU。这个仓库里的入门示例cpp/0_Introduction/给出了完整答案分配、拷贝、启动、校验每一步都有可运行的代码。场景二遇到具体技术点找标准写法。比如共享内存怎么做矩阵乘法流和事件怎么重叠计算直方图怎么做两阶段归约。仓库里几乎每个概念都对应一个目录reduction/、histogram/、transpose/照着读比查零散文档快得多。场景三验证你的机器。换了新显卡或新驱动想确认 GPU 计算环境没问题。先跑一遍 deviceQuery再跑一遍 run_tests.py 批量执行全部示例几十秒就能确认环境是否可用。装好环境从克隆代码到一条命令验证先说硬件和软件要求一张支持 CUDA 的 NVIDIA GPU以及对应版本的驱动Linux 或 WindowsmacOS 不支持 CUDA 编译CMake 3.20 以上sudo apt install cmake即可装上安装 CUDA Toolkit 到 NVIDIA 官网 按系统下载选自定义安装勾上编译器nvcc和库组件。拿到代码git clone https://gitcode.com/GitHub_Trending/cu/cuda-samples装完用一条命令验证环境nvcc --version能看到 CUDA 版本号说明编译器和库都在位。注意 nvcc 能跑不代表驱动没问题后面第一次运行示例时会再做一次确认。跑通第一个示例vectorAdd 的三步操作选 vectorAdd 作为第一步它是整份仓库里最短的完整示例两个向量逐元素相加覆盖了 GPU 程序的全部基本动作。在仓库根目录执行构建mkdir build cd build cmake .. make -j$(nproc)整个仓库会全部编译。只编译这一个也可以在 build 目录里cmake --build . --target vectorAdd -j。然后运行./cpp/0_Introduction/vectorAdd/vectorAdd输出会依次打印向量长度、Copy input data from the host memory to the CUDA device、内核启动配置196 blocks of 256 threads最后一行是Test PASSED。看到Test PASSED说明驱动、编译器、显存、内核启动整条链路都通了。项目地图从入门目录到 Python 示例仓库分两条主线C 示例cpp/和 Python 示例python/。这张图展示的是 dct8x8 示例配套的 DCT 基函数u0 到 u7 每个子图对应一个频率分量是该示例实现图像离散余弦变换时的数学基础也代表了领域专用目录里这类示例的形态算法 可运行的 GPU 实现。目录作用适合人群cpp/0_Introduction/向量加法、矩阵乘法、统一内存、异步 API第一次写 CUDA 的人cpp/1_Utilities/deviceQuery 查设备、topologyQuery 查拓扑排查硬件配置cpp/2_Concepts_and_Techniques/归约、直方图、转置、排序网络、线程块归约学核心技术的开发者cpp/3_CUDA_Features/CUDA Graphs、张量核心、warp 聚合原子操作跟进新特性的工程师cpp/4_CUDA_Libraries/cuBLAS、cuFFT、NPP、CUB、nvJPEG 等库的用法要用 NVIDIA 库做工程的人python/基于 cuda.core 的 Python 示例含 PyTorch/TensorFlow 互操作Python 开发者核心示例拆解vectorAdd 里藏着哪些关键 APIvectorAdd的价值不只是能跑它把 CUDA 编程的基本骨架立起来了。整个main的脉络是cudaMalloc在显存上分配 d_A、d_B、d_C →cudaMemcpy把输入拷到 GPU → 启动内核 → 结果拷回 → CPU 端逐元素对比验证。内核本身只有几行__global__ void vectorAdd(const float *A, const float *B, float *C, int numElements) { int i blockDim.x * blockIdx.x threadIdx.x; if (i numElements) { C[i] A[i] B[i]; } }每个线程算出自己的全局下标i处理第i个元素if是必要的边界保护因为线程总数是向上取整的。启动配置在主机端int threadsPerBlock 256; int blocksPerGrid (numElements threadsPerBlock - 1) / threadsPerGrid; vectorAddblocksPerGrid, threadsPerBlock(d_A, d_B, d_C, numElements);两个数决定了整个网格的形状后面读任何示例都可以先找这两行。同一份算法仓库里还给了三种 API 版本Runtime APIvectorAdd、Driver APIvectorAddDrv、运行时 JIT 编译vectorAdd_nvrtc对比着读能理解同一套逻辑在不同接口下的写法差异。进阶能力Graphs、张量核心与多 GPU这张图是 nvJPEG 示例解码出的一张样例照片代表 cpp/4_CUDA_Libraries/ 里这类库示例的定位不重复造轮子直接演示 cuBLAS、cuFFT、NPP、nvJPEG 这些 NVIDIA 官方库的标准调用方式工程里要集成哪个库先来这里抄正确的调用顺序。CUDA Graphs把多次内核启动和数据传输录制成一张图一次提交。simpleCudaGraphs 演示基本流程jacobiCudaGraphs 展示用图迭代求解CPU 侧开销会明显下降。张量核心 GEMMbf16TensorCoreGemm 和 cudaTensorCoreGemm 演示不同精度下用硬件矩阵单元做矩阵乘做推理和训练前值得读一遍。多 GPU 通信simpleP2P 测设备间点对点访问simpleMultiGPU 演示多卡各算一块数据p2pBandwidthLatencyTest 量化带宽和延迟是排查多机多卡问题的第一步。Python 侧python/2_CoreConcepts/ 里的cudaGraphs、parallelReduction、tmaTensorMap等示例用 cuda.core 实现了和 C 侧对应的能力customPyTorchKernel 则演示怎么给 PyTorch 挂自定义 CUDA 算子。常见坑现象、原因和解法现象cmake ..报找不到 CUDAToolkit。原因cmake 没定位到 Toolkit 根目录。解法配置时加-DCMAKE_PREFIX_PATH/usr/local/cuda或设置CUDA_PATH环境变量。现象示例启动即报 CUDA 初始化失败或 deviceQuery 找不到设备。原因驱动太旧或 GPU 正被其他进程占满。解法升级驱动nvidia-smi看占用杀掉吃满显存的进程。现象编译报不支持的 GPU 架构。原因你的显卡计算能力低于示例默认目标默认覆盖 7.5 到 12.0。解法查显卡对应的计算能力配置时指定-DCMAKE_CUDA_ARCHITECTURES你的架构。现象结果错了但cudaGetLastError返回成功。原因内核是异步执行的启动后立即检查拿到的是旧值。解法先cudaDeviceSynchronize()再检查或直接开compute-sanitizer跑一遍定位越界和竞态。下一步从跑通到读源码的六步路线初学三步跑deviceQuery认识自己的 GPU算力、显存、SM 数量这些数字后面反复要用。通读 vectorAdd.cu 和 matrixMul.cu把内存分配、拷贝、启动配置和输出校验四步在脑子里过一遍。动手改参数把向量长度、线程块大小改一改看输出里的启动配置怎么变、性能怎么变。进阶三步精读 cpp/2_Concepts_and_Techniques/ 的 reduction、histogram、reductionMultiBlockCG把共享内存和线程间协作写透。同一算法对比三种 APIvectorAdd、vectorAddDrv、vectorAdd_nvrtc理解 Runtime、Driver、NVRTC 各自的适用场景。挑一个进阶特性落地用 CUDA Graphs 改造一个循环启动的内核或用 cudaGraphsPerfScaling 看规模化后的性能曲线。这套示例的价值在于它们不是 PPT 里的伪代码而是能编译、能跑、能改动的真实工程。学 CUDA 最快的路径就是从一个示例出发改参数、读源码、遇到卡点翻下一个目录。【免费下载链接】cuda-samplesSamples for CUDA Developers which demonstrates features in CUDA Toolkit项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表