High-performance computing (HPC)
Concepts discrimination
- What is the realtionships among parallel computing, high-performance computing and supercomputing ?
- parallel computing: using multiple computing core to compute a job
- high-performance computing: a type of parallel computing, and it needs to leverage computing performance efficiently
- supercomputing: a type of high-performance computing, and it has a huge calculation volume and operating scale
Background
3 traditional ways to make computers run faster
- faster clocks
- more work/clock cycle
- more processors
The key design concept of gpu
Using more simpler processors to substitute fewer more complex processors.
cpu more cares about latency(time), gpu more cares about throughput(stuff/time)
相关概念
SIMD
SPMD
SIMT
高性能计算体系架构的划分
- 向量机PVP
- 对称多处理机SMP
- 大规模并行处理机MPP
- 工作站集群
HPC是一个囊括算法、硬件、软件等各方面的较为综合的方向
关键技术
- 传统研究方向
1.1 处理器加速部件
1.2 大规模系统互联
1.3 高性能通信软件
1.4 高性能算法库
1.5 应用 - 新兴的研究领域
2.1 超算云
开发分层的能力模型,将复杂的高性能计算知识转化成逐层可理解的知识、技能训练
-
并行算法设计能力
并行算法的定义和分类、并行算法的表达、并行算法的复杂度度量、并行算法中的同步和通讯、并行计算模型(例如PRAM模型、异步APRAM模型、BSP模型、logP模型等)、并行计算的一般设计方法及基本设计技术、并行算法的一般设计过程等 -
并行编程能力
并行归约算法、并行前缀加法、并行矩阵处理;GPU编程语言选择(OpenCL、CUDA 与C++ AMP);了解计算机异构并行计算架构
除此之外,了解整个生态需要几个部分的组件,这些组件都有什么。跑几个demo,每个部分可以挑一两个框架仔细研究其源码,比如消息队列学一学kafka,日志采集学一学flume、分布式数据库学一学Hbase、计算框架学一学spark等。如果时间够用,还是建议从hadoop生态开始学,再学spark、flank等。集群的搭建也很重要,仅熟悉client端口调用还是不太够用的 -
应用优化能力
CPU基础知识,比如CPU如何读取数据,CPU执行一条计算命令的过程是怎么样的;存储系统的层级结构,比如存储系统的层级结构是怎样的,不同层级的存储有什么差别;IO系统知识,比如了解IO如何读写。
除此之外,OS知识和编译器的知识也是必须要掌握的。比如,OS如何进行进程调度,如何进行内存分配,如何访问IO设备,如何提供上层接口(什么是系统调用,系统调用如何被执行)、如何优化执行代码等。 -
模型抽象能力
从底层的硬件架构,操作系统,中间件 -> 并行编程模型 -> 再到上层的应用
从事高性能计算的人员分类
- 高性能计算应用研发类
- 二是高性能计算系统运维类
以下是一个适用于初学者的高性能计算学习路线:
- 掌握编程语言:学习一种高级编程语言(例如C、C++、Python),理解其基本语法、数据类型、控制结构和函数。掌握这些基础知识是后续学习的基础。
- 熟悉并行编程模型:高性能计算的一个重要特点就是并行计算,因此需要掌握并行编程模型,例如共享内存模型(OpenMP)和分布式内存模型(MPI)等。这些模型的学习需要对并发编程、同步、互斥、死锁、调度等概念有深刻的理解。
- 理解计算机体系结构:学习计算机组成原理、操作系统、计算机网络等基础知识,了解计算机体系结构的工作原理,如内存、缓存、IO等,这些知识是进行高性能计算的必备基础。
- 学习数值计算:数值计算是高性能计算的核心内容,需要学习数值分析、数学模型建立、求解和优化等方面的知识。
- 掌握算法和数据结构:高性能计算需要优秀的算法和数据结构,例如排序、搜索、图算法、线性代数等。这些知识对于高效利用计算资源和提高计算效率至关重要。
- 实践:通过实践,运用已学知识进行实际问题求解,例如高性能计算竞赛、实验室项目等。这有助于更深入地理解学术知识、技能和技术,培养团队协作、创新思维和解决问题的能力。
高性能计算上层有算法
中层是程序设计与优化
底层是硬件设计
相关竞赛
- 每年11月在美国举行的SC大会期间的大学生超算竞赛
- 每年6月在欧洲举行的ISC大会期间的大学生超算竞赛
- 每年春季在中国举行的ASC世界大学生超算竞赛
底层技术,技术兴趣大于业务兴趣
合格,理解计算机体系结构,有一定编程功底,能够解决实际业务问题。对于程序性能,能够根据体系结构和算法,做出定性分析,从而优化程序性能
优秀,在合格的基础上,能够做定量分析,比如访存指令、计算指令的延迟是多少个时钟周期,根据这些数据去优化程序,从而让程序逼近芯片的理论性能
相关书籍
- 现代CPU性能分析与优化(ISBN:9787111719489)
典型 HPC 解决方案中包含 3 个主要组件:
计算
网络
存储空间
HPC 解决方案可以部署到本地、边缘,甚至是云端。
高性能计算属于算法层(强调的是优化工作),前后端开发属于应用层
只要到达了应用层面,应用应用,需要开发者来使用,如果技术的难度不足以让大多数人能够进行这份工作,那么说明技术尚未到达应用层。多数人能够使用意味着技术变得普适化、流程化、机械化
开发者充当的角色趋向于工人,精力/年龄逐渐取代经验成为胜任这项工作的基础,35岁问题由此出现
高性能计算本身的学科特点决定了它不会成为大规模应用的场景,这里所说的大规模是相较于应用层前后端开发用于普通用户那种大规模,其更多的是应用于专业领域的问题,针对专业问题进行算法优化,不光要求数学能力,还需要对于底层硬件知识有所了解
同人工智能相比,hpc不会变成唯论文学科,AI的定位要更偏上层,和底层知识结合较少,hpc不光存在上层的算法问题,也存在下层的硬件问题,下层的存在使其不会过于偏向算法,作为一种工具学科,应用仍然是其重要的一部分,所以一定是理论+时间,此时AI与hpc的比较就相对明显了
# 用于GPU加速高性能计算编程模型
1.OpenMP
2.HIP:可移植异构计算接口,厂商中立的C++编程模型,用于实现高度优化的GPU工作负载
3.OpenCL
Reference
- [1] 并行计算:高性能计算学习路线
- [2] 高性能并行编程与优化公开课
- [3] GPU编程-GoDeep系列
- [4] Introduction to HPC-中文翻译