学习CPU并行程序性能优化的意义:
学习CPU计算是现代计算机科学中不可或缺的一部分。掌握CPU计算原理和应用,能够提高我们的编程技能和解决问题的能力,帮助我们更好地应对计算机科学领域中的挑战和机遇。此外,CPU计算在计算机体系结构、算法设计、软件工程等方面都有广泛的应用,是我们理解计算机系统和编程语言的基础。因此,学习CPU计算对于我们的职业发展和个人成长都具有重要的意义。
比如在训练大型生成式语言模型(如 GPT-3)时,CPU 和 GPU 都扮演着不同的角色。CPU 主要负责数据的预处理和模型参数的更新。在训练过程中,大量的数据需要被加载、预处理和转换成适合模型输入的形式。这些任务通常由 CPU 来完成。此外,在模型的训练过程中,参数需要被不断更新,这也是 CPU 所必需的。GPU 则主要负责模型的计算和优化。如在训练深度神经网络时,需要进行大量的矩阵计算、梯度计算等计算密集型任务。在训练大型生成式语言模型时,需要使用数千个甚至数万个 CPU 和 GPU,将计算任务分配到多个节点上,以实现分布式训练。这样可以大大加快训练速度,缩短模型训练的时间。
CPU并行程序优化课程简介
"CPU并行程序优化课程"是一门专注于提升CPU程序运行效率的课程。在这门课程中,学员将学习到如何通过并行化算法和数据结构设计、优化内存访问模式、优化编译器选项等手段来提高程序的性能表现。
通过本课程的学习,学员将掌握如何在多核CPU上充分发挥其计算能力,提高程序的运行速度和效率,同时还能够应对大规模数据处理和高并发计算等场景的需求。无论您是从事科研、软件开发、数据分析等领域,本课程都将帮助您更好地应对各种CPU性能优化挑战,提高工作效率,进一步提升您的职业能力。
CPU并行程序优化课程特色
实用性强:本课程重点针对CPU程序优化的实践需求,课程内容丰富实用,帮助学员快速掌握各种CPU优化技巧,提高程序性能表现。导师以自身参与的实际项目作为案例,在课程中再现亲身管理、实施的项目,利用天河超算实验室环境带领学员重新经历每一个环节及细节,帮助学员提升职场经验及求职竞争力。
专业性强:本课程由国内知名高性能计算专家倾情打造,结合多年从事CPU/GPU性能优化的经验,教授最新、最实用的优化技术和方法。超算导师团熟悉国产先进计算生态,掌握从芯片体系架构、系统环境、编译环境、算法到应用的全流程关键技术。在多核CPU、GPUMIC/KNL、DSP等芯片平台有深入研究,具备人工智能、数值仿真、信号处理、三维可视化、图像处理等算法方面专利30余项。
适用性强:本课程适合不同领域的技术人员学习,无论您是从事科研、软件开发、数据分析等领域,或在校大学生都能够受益于本课程。
实用性强:本课程内容会根据最新的CPU技术和优化经验进行更新,保证学员始终掌握最前沿的CPU性能优化技术。6小时的编程马拉松更是全面考察考生独立工作能力,期间考生通过真人出镜、全程录屏等方式,在国家超级计算天津中心新一代超级计算天河平台(ARM aarch64架构,单节点64个CPU核)上检验考生在程序性能分析、软件编译、OpenMP多线程优化、SIMD多数据优化、作业管理系统使用等方面的综合能力。
互动性强:本课程设置有丰富的案例分析、实战演练和互动答疑环节,帮助学员在课程中深度掌握优化技术,同时与专家和同行交流互动,加深学习效果。
课程采用师徒制小班教学,采用先进的任务式学习方式,借助学习系统让学员能随时随地学习、随心进行答疑,此外根据学习进度设置固定的直播答疑串讲环节,加深学员学习效果。
适用人群
全日制一本及以上大学生
社会上有志从事超算/高性能计算/先进计算行业的年轻人
各大中小芯片公司技术人员进修、国家超算中心技术人员进修
报名流程
咨询——报名——缴费——学习——就业
课程大纲
一级模块名称 | 二级模块名称 | 二级模块名称 |
超算平台开发环境与基础优化技术 | 超级计算机平台简介 | 超级计算机体系结构 |
天河超算平台登录使用 | ||
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函数 | ||
聚集加载和分散存储 |