SuperAPI AI 工具集

cuda

编程与开发

查看项目

更新于 10-16 06:49

技能介绍

用途:指导智能体进行 NVIDIA CUDA C/C++ 开发,覆盖内核启动配置、从寄存器到全局内存的存储层级、基于流的异步执行、nvcc 编译选项、Thrust 库使用,以及 warp 分歧、非合并访存等常见性能陷阱的诊断。

主要能力:编写与优化矩阵乘、归约、模板计算等 CUDA 内核;选择 block/grid 维度并估算占用率;排查访存模式或低占用率导致的慢内核;用 cudaMemcpyAsync 搭建多流流水线;用 nvcc 选择架构标志(-gencode);用 Thrust 替代手写内核实现并行原语。

使用方式:CUDA 以线程组成 block、block 组成 grid 组织工作。内核用 global 声明,以 vector_add<<<blocks, threads>>>(...) 启动,线程索引为 blockIdx.x * blockDim.x + threadIdx.x。内存层级包括寄存器、shared 共享内存、全局内存、constant 常量内存与纹理内存;共享内存分块(如 TILE 16 的矩阵乘)可减少全局访存。流与异步拷贝示例:cudaStreamCreate、cudaMemcpyAsync、cudaStreamSynchronize,配合 cudaMallocHost 固定内存实现真正的异步 DMA 重叠。编译示例:nvcc -O3 -arch=sm_80 -o prog vector_add.cu;多架构胖二进制用 -gencode arch=compute_80,code=sm_80 等;调试用 nvcc -G -g -O0;查看 PTX/SASS 用 -ptx、-cubin 与 cuobjdump -sass。常用标志包括 -O3、-G、-lineinfo、--use_fast_math、-maxrregcount=N。占用率可用 cudaOccupancyMaxActiveBlocksPerMultiprocessor 或 Nsight Compute 指标估算。Thrust 示例:thrust::device_vector、thrust::sort、thrust::reduce。

适用场景:矩阵乘、归约、模板计算等内核编写与优化;block/grid 维度选择与占用率估算;多流流水线搭建;nvcc 编译与架构标志选择;用 Thrust 实现排序、扫描、归约。

限制与常见问题:warp 内分支会导致串行化;连续线程应访问连续地址以保证合并访存。cudaErrorIllegalAddress(700) 需用 compute-sanitizer --tool memcheck 排查;cudaErrorLaunchTimeout(702) 需减少工作量或拆分内核;低占用率需减少寄存器或共享内存;CPU/GPU 结果不一致需加 __syncthreads() 或用原子操作;no kernel image available 说明 -arch=sm_XX 与 GPU 计算能力不匹配,可用 nvidia-smi --query-gpu=compute_cap 查询;H2D/D2H 拷贝慢通常因使用可分页内存,应改用 cudaMallocHost 固定缓冲区。相关技能包括 cuda-profiling、cuda-debugging、gpu-memory-model、hip-rocm、triton-lang、openmp。