(1)GPU架构与并行计算基础:理解GPU与CPU的架构差异(多核并行vs众核并行),掌握SIMT(单指令多线程)执行模型、线程层次结构(网格Grid、线程块Block、线程Thread)以及GPU存储体系(全局内存、共享内存、寄存器、常量内存、纹理内存)的组织方式。了解GPU在通用计算中的应用场景和发展趋势,掌握GPU计算加速的基本原理。
(2)CUDA编程模型与环境搭建:学习CUDA编程模型的核心概念,包括内核函数(Kernel)定义与调用、线程组织方式、内置变量(threadIdx、blockIdx、blockDim)和API函数。搭建CUDA开发环境,掌握NVCC编译器使用、项目配置和调试工具(NVIDIA Nsight、CUDA-GDB)的应用。编写第一个CUDA程序,实现向量加法并理解主机与设备间的数据传递机制。
(3)CUDA内存管理:掌握CUDA API进行设备内存分配(cudaMalloc)、释放(cudaFree)和主机-设备间数据拷贝(cudaMemcpy)。理解页锁定内存(pinned memory)、统一内存(unified memory)的应用场景,优化CPU与GPU之间的内存迁移,减少数据传输开销。掌握错误处理机制(cudaGetLastError)和同步操作(cudaDeviceSynchronize)。
(4)线程层次结构与执行模型:掌握CUDA线程、块和网格的配置方法以定义并行度。理解线程束(Warp)调度原理与过程、延迟隐藏原则和设备占用率的计算方法,能够根据硬件资源合理配置内核执行参数以最大化利用率。学习块内同步(__syncthreads)和网格级同步机制。
(5)CUDA存储器优化技术:深入理解各类存储器的特性与适用场景。掌握全局内存的合并访问原则,利用共享内存减少全局内存访问次数,使用常量内存和纹理内存加速特定访问模式。学习寄存器压力管理、本地内存溢出及bank conflict的避免策略。实践基于平铺(tiling)技术的矩阵乘法优化。
(6)原子操作与同步机制:掌握原子操作(atomicAdd等)的原理与应用场景,解决并行计算中的竞态条件。实现直方图计算等需要共享数据更新的算法。学习CUDA流(Streams)实现计算与数据传输的重叠,提高设备利用率。掌握异步并发执行和事件同步机制,使用CUDA事件进行性能计时和依赖管理。
(7)并行算法模式与CUDA实现:掌握GPU上常见并行算法的设计模式,包括规约(Reduce)、扫描(Scan/Prefix Sum)等。实现并行规约算法进行数组求和,理解Kogge-Stone与Brent-Kung等不同扫描算法的实现与优化。学习排序算法的并行化实现。
(8)CUDA性能分析与调试工具:使用NVIDIA Nsight Systems、Nsight Compute进行CUDA代码的性能分析,识别性能瓶颈和热点。掌握CUDA-MEMCHECK检测内存错误和泄漏,使用NVTX注解进行精细化性能标注。学习使用nvprof和Visual Profiler进行性能剖析。
(9)CUDA库的应用:了解CUDA生态系统提供的常用库,包括cuBLAS(线性代数)、cuFFT(快速傅里叶变换)、cuRAND(随机数生成)、Thrust(C++模板库)和CUB(CUDA原语库)。学习如何利用这些库加速应用开发,避免重复造轮子。实践使用cuBLAS进行矩阵运算加速。
(10)CUDA高级特性:掌握动态并行(Dynamic Parallelism)的原理与应用场景,实现GPU内核中启动新的内核。了解统一虚拟地址空间(Unified Virtual Address Space)和统一内存访问机制。学习协作组(Cooperative Groups)和现代C++与CUDA的融合编程。
(11)多GPU编程基础:掌握多GPU编程模型和任务划分策略。学习使用CUDA API管理多设备(cudaSetDevice、cudaDeviceProp)。了解点对点通信(Peer-to-Peer Access)和多GPU数据并行模式的基本原理。使用NCCL(NVIDIA集合通信库)实现多GPU间高效通信。
(12)综合项目实战:结合所学知识,完成一个完整的GPU加速项目(如高性能矩阵运算、图像处理算法加速、蒙特卡洛模拟或深度学习算子实现)。涵盖算法设计、CUDA内核实现、性能优化(合并访问、共享内存、流并发)、功能验证和结果分析的全流程,形成规范的CUDA开发项目报告。