大模型一出,各类企业的各类“模型”竞赛般的亮家伙,算力时代抢先到来。2023年4月超算互联网的正式部署,标志着,很快,越来越多的应用都需要巨大的计算资源。这给传统的计算机体系结构带来了巨大的挑战,计算领域的革命性技术将持续涌现。而基于CUDA的GPU并行程序优化正引领着这场变革的浪潮! CUDA对于加速模型训练和部署有着显著的积极影响:CUDA提供了强大的并行计算能力,可以大幅度减少训练和推理深度学习模型所需的时间,同时可以帮助开发人员进行大规模的计算和优化模型的部署过程。 使用CUDA的优点显而易见,更创新,更速度、高质量。 技术人的科技嗅觉永远都是最敏锐的,也是最爱学习、不断进修的。自从我们的CPU并行程序优化实战课程面世之后,催更GPU并行程序优化的声音就越来越多、越来越多不同行业的朋友关注到了高性能计算。 终于,不负众望,我们精心研发的GPU并行程序性能优化实战课程将如期和大家见面。先睹为快(《基于CUDA的GPU并行程序优化实战课程》课程大纲)→
第一章:GPU并行计算导论 | 类型 | 内容 | 知识点 | 课堂教学 | CUDA导论及课程介绍 | 并行计算、GPU、CUDA导论 | 课程内容介绍 | 课堂教学 | CUDA软件结构 | 异构编程模型 | 课堂实战,第一个CUDA程序:Hello World | CUDA软件结构 | kernel函数定义与调用 | CUDA函数前缀 | nvcc编译 | 第二章CUDA编程模型 | 类型 | 内容 | 知识点 | 课堂教学 | CUDA 内存管理 | CUDA编程模型 | 课堂实战:CUDA实现向量相加 | GPU存储层次 | device和host数据传输 | CUDA内存管理API | cudaMalloc() | cudaMemcpy() | cudaFree() | 课堂教学 | CUDA线程层次 | thread | 课堂实战:GPU加速模拟信号降噪:一维卷积平滑滤波 | block | grid | 一维、二维、三维索引 | 课堂实战 | CUDA 存储模型 | 寄存器 | 课堂实战:一维卷积平滑滤波程序性能优化(常量内存+共享内存优化) | 共享内存 | 本地内存 | 常量内存 | 全局内存 | 纹理内存 | 第三章CUDA进阶使用 | 类型 | 内容 | 知识点 | 课堂教学 | CUDA硬件结构与调度 | SM的结构 | 线程调度机制: | 硬件Core、SM、Device到线程层次的映射 | SIMT | 线程束 | 延迟隐藏 | 课堂实战 | CUDA常用编程接口 | 流 | 流和事件 | 事件 | 课堂实战:流和事件演示实验 | 异步传输 | 原子操作 | 设备管理 | 错误管理 | 内置数据类型 | 原子操作 | 课堂实战 | 多GPU数据传输 | Peer-to-Peer Memory Access | 课堂实战:演示实验 | 大数据向量点积运算 | 第四章 CUDA进阶项目(一) 高性能计算经典问题:基于CUDA的归约及求和优化 | 类型 | 内容 | 知识点 | 课堂教学 | 归约算法实现及优化 | 访存优化、线程调度优化 | 课堂实战 | 前缀求和算法实现及优化 | 内存优化、线程调度优化 | 课堂实战 | SN递归算法实现及优化 | | 第五章 CUDA进阶项目(二) 高性能计算经典问题:基于CUDA的矩阵乘优化 | 类型 | 内容 | 知识点 | 课堂教学 | 矩阵乘算法SGEMM实现及优化 | 分块算法、存储、cudaMallocPitch()、分支消除等优化 | 课堂实战 | 稀疏矩阵向量乘算法实现及优化 | 矩阵存储格式CSR、ELL等优化 | 第六章 CUDA进阶项目(三) 基于GPU的人工智能/深度学习框架与图像处理 | 类型 | 内容 | 备注 | 课堂教学 | CUDA深度神经网络库cuDNN部署与应用 | cuDNN安装 | 轻量级神经网络库Darknet介绍与安装 | darknet安装、参数调优 | 课堂教学 | 深度学习推理库TensorRT+CUDA加速Pytorch模型 | 利用TensorRT对Pytorch模型推理加速 | 课堂教学 | 基于GPU的图像处理算法优化 | CUDA+CV处理大图像数据 | CPU并行程序优化大纲
一级模块名称 | 二级模块名称 | 二级模块名称 | 超算平台开发环境与基础优化技术 | 超级计算机平台简介 | 超级计算机体系结构 | 天河超算平台登录使用 | Linux操作系统开发环境 | Linux常用命令 | 编辑器VIM/编译器GCC/工程构建工具Make/调试器GDB入门 | 超算平台任务管理系统slurm | 高性能算法 | 稀疏矩阵压缩存储格式 | 稀疏矩阵向量乘算法SpMV优化 | 基础性能分析 | 静态分析工具understand | 动态分析工具gprof | 计时函数辅助方式 | 基础性能优化 | 流水线 | 循环展开 | 循环分块 | 连续访存 | 并行编程模型简介 | 分布式并行模型-MPI | 共享内存式并行模型-OpenMP | 单指令多数据并行模型-SIMD | MPI | MPI基本概念 | 进程与MPI程序基本编程方式、编译、运行 | MPI四个基本接口 | 并行模式 | 点对点通信(阻塞式) | 发送MPI_Send与接收MPI_Recv | 消息标签tag及MPI_ANY_TAG和MPI_ANY_SOURCE | jacobi并行化-阻塞消息通信版本 | 组织进程通信避免死锁 | 接口MPI_Sendrecv | jacobi并行化-基于捆绑消息发送接收版本 | 点对点通信(非阻塞式) | 接口MPI_Isend与MPI_Irecv | 非阻塞通信的等候与检测 | jacobi并行化-非阻塞消息通信版本 | 重复非阻塞通信 | jacobi并行化-重复非阻塞消息通信版本 | 集合通信 | 广播bcast | 分散scatter | 收集gather | 规约reduce | 全互换alltoall | 路障barrier | 通信模式和虚拟进程拓扑 | 四类通信模式 | 虚拟进程拓扑 | OpenMP | OpenMP基本概念 | 线程概念 | OpenMP基本编程方式、编译、运行 | OpenMP并行程序基础设计 | openMP并行域与指令parallel | 变量作用域与私有、共享属性 | 线程竞争、临界区和指令critical | OpenMP的循环体for结构 | 循环迭代并行和指令for | 循环调度策略与子句schedule | 变量作用域属性与子句private、shared、default | 变量规约属性与子句reduction | 嵌套循环与子句collapse | OpenMP的分段section与task结构 | 代码段并行和指令section | 任务池并行和指令task | OpenMP的其他指令 | 单线程指令single、master | 路障指令barrier | 原子指令atomic | 缓存一致性 | 缓存、缓存一致性与伪共享 | SIMD | SIMD基本概念及编程入门 | SIMD与向量化概念 | 程序向量化思路与编程基础方式 | 向量寄存器、ARM架构与NEON | 自动向量化 | 编译选项自动向量化 | 编译指导语句自动向量化 | NEON-intrinsic指令集(命名规则及存取操作) | intrinsic的向量数据类型和函数命名规范 | 向量寄存器初始化函数 | 交叉存取技术-以RGB转换为例 | 存储、加载操作函数 | NEON-intrinsic指令集(算术、比较、逻辑及其他操作) | 算术操作函数 | 比较操作函数 | 逻辑操作函数 | 其他操作函数 | SVE指令集简介(选修) | Z、P寄存器 | 命名规则及常见intrinsic函数 | 聚集加载和分散存储 | |