高性能计算:从入门到"放弃"
发表于 2025/09/22
0
引子
今日在书房偶然翻出一本《高性能计算编程指南》。书上落满灰尘,思绪一下子回到了2014年。这次咱也好为人师一回:用这篇文章讲讲HPC,主要是给想入坑的人推荐一些该领域还不错的资料。
高性能计算的罪与罚
提到高性能计算,很多人都望而生畏:这是个什么脏东西(划掉)?
就算你没听过天河一号、天河二号、太湖之光这些超级计算机(Super Computer),但你每天出门前基本都会瞅两眼手机里的天气预报吧。

你有没有发现,现在的天气预报可比20年前准了很多?(虽然这么说很暴露年龄)
20年前,不看天气预报后悔一个小时,看天气预报后悔一天,看天气预报主打的就是一个心理安慰。


主要技能点主要有两个:计算数学/数值分析和并行计算。
计算数学
首先,就是计算数学。
这个微分符号对人类来讲是简单的。但对计算机来说,那就是:你不认识我,我不认识你。

换句话说,在计算机里我们用计算机能理解的"除法"带代替了数学中的"微分"。这种算法有专门的术语——差分法(difference methods)。注:这其实也是个不严谨的说法,因为计算机其实连除法都没法"理解",计算机只能理解0和1。
所以,你看:我们把计算机不能处理的连续问题转化成了计算机可以处理的离散问题。这个过程叫做离散化(discretization)。
这些数学方法的研究太深太专了,研究透了也没啥实际用处,基本属于计算数学理论派干的事儿,咱们知道算法流程,会用就行了。
离散化后,就会得到一个数值方程。这个方程一般有如下两种形式:
第一种形式:给定A和b, 求解x[当然,这里的A是矩阵,x和b都是向量]
Ax = b
第二种形式:给定A,求满足条件的a和x
看到这两个方程,是不是有种“死去的记忆在突然攻击我”的感觉?
当然,HPC只有数学肯定是玩不转的,还需要了解并行计算。
并行计算
并行计算的思想很好理解。假如你是个包工头,你招募了一个工人帮你搬砖,效率肯定很低。
于是你就想扩张队伍,做大做强,招10个工人“一起”搬砖。
虽然速度不一定是一个人的10倍(注意这句话,后续的文章中会考),但必然效率能提升不少。
这里的“一起搬砖”,用计算机领域的术语就是:并行(Parallel)
在并行计算领域,如果只考虑CPU通用计算,并行可粗略划分成两类:进程级并行和线程级并行。


也就是说,进程之间如果想进行数据交互,必须要进行通信(communication)。处理这种通信的标准/协议或者编程模型就叫做MPI(Message Passing Interface)。中文翻译:消息传递接口(翻译的太难听了)。
由于线程之间本身就共享内存,它们之间天然共享数据,因此没有通信的必要。但同样需要统一的标准或编程模型来处理,这种编程模型就叫做OpenMP(Open Multi-Processing)。这个就别翻译成中文了吧。
因此,MPI和OpenMP这两种并行方式分别又被称为:分布式内存并行(distributed memory parallelism)和共享内存式的并行(shared memory parallelism).
事实证明,这样效率往往最高。
总结起来,HPC领域的两大支柱:计算数学和并行计算。
讲到这里,好学的你肯定会问:有没有一些系统介绍计算数学和并行计算的书籍或者资料呢?
当然是有的。不然咱这10年的HPC不白干了?如下就是我的压箱底的资料库。
计算数学の资料推荐环节
如果对这线性代数的知识有所遗忘,推荐一本书:工程数学—线性代数 第七版(同济大学数学科学学院编),简称《线性代数(同济版)》。同济版的线性代数已经算是国内教材的天花板了。鉴于咱们一向有着“学不明白就赖教材写得烂”的习惯。
这里推荐一本更好的线性代数教材:《线性代数应该这样学》阿克斯勒 著,杜现昆 刘大艳 马晶 译 人民邮电出版社。
上面两本书偏重概念,具体到算法层面。个人强烈推荐:华东师范大学潘建瑜老师的《矩阵计算讲义》。
如果这本书啃透了,线性代数的算法就可以包打天下了。
推荐《数值方法简明教程》 聂玉峰 王振海 著 高等教育出版社。推荐这本书的理由是我第一次接触数值计算看的就是这本书(毕竟人总是对第一次念念不忘)。
另外,如果大家能获取到资源的话,推荐北京大学彭良友教授的《计算物理学A》。不要被名字吓到,虽然这门课程叫做计算物理学,但里面的绝大部分篇幅都是在讲数值计算。因为毫不夸张地说:计算物理是推动了数值计算发展的中坚力量。
可惜的是彭老师似乎没有公开他的讲义(至少我没搜到)。所以大家只能八仙过海,各显神通了。
并行计算の资料推荐环节
MPI的书籍推荐:清华大学都志辉老师的《高性能计算之并行编程技术——MPI并行程序设计》。这本书堪称我MPI的入门教程——当年我靠着从北大图书馆借来的这本书写出了自己的第一个MPI程序。中科院测量与地球物理研究所把这本书的PDF版发布到网上,就是不知道有没有征得作者都志辉老师的同意(超小声)
OpenMP就没啥书可以推荐了:因为当年在我写OpenMP程序的时候,我发现了一个宝藏网站,这个网站就是中科大超级计算中心。
在教用户写MPI和OpenMP程序这方面,中科大超级计算中心可谓遥遥领先。先放张截图感受下:

中科大超级计算中心MPI资料库:https://scc.ustc.edu.cn/2009/1014/c397a3324/page.htm
中科大超级计算中心OpenMP资料库:https://scc.ustc.edu.cn/zlsc/cxyy/200910/t20091014_13081.html
话说回来,MPI和OpenMP不乏好的教材,这里推荐一本国内的和一本外国的。
国内的推荐:《并行计算导论》张林波,迟学斌,莫则尧,李若 著 清华大学出版社。

看封面就知道这本书有些年头儿了。这本书是从并行计算最基本的概念开始说起,真正做到了深入浅出。
BTW,大家可自行百度这本书的四位作者,都是中国高性能计算领域的巨佬。
国外的推荐:《并行程序设计导论》[美] 帕切克 著,邓倩妮 等译 著 机械工业出版社。
推荐材料总结
增加这一Part是为了方便大家做伸手党,快速找到材料的。如果不需要的话可直接跳过本章节。计算数学方面:
[1]. 《工程数学 线性代数》 第七版 同济大学数学系编. 高等教育出版社
[2]. 《线性代数应该这样学》 阿克斯勒 著,杜现昆 刘大艳 马晶 译 人民邮电出版社
[3]. 《矩阵计算讲义》华东师范大学 潘建瑜
[4]. 《数值方法简明教程》 聂玉峰 王振海 著 高等教育出版社
[5]. 《计算物理学A》 北京大学 彭良友
并行计算方面:
[1]. 《高级能计算并行编程技术--MPI并行程序设计》 都志辉 著 清华大学出版社.
[2]. 《并行计算导论》张林波,迟学斌,莫则尧,李若 著 清华大学出版社
[3]. 《并行程序设计导论》[美] 帕切克 著,邓倩妮 等译 著 机械工业出版社
[4]. 中国科技大学超级计算中心资料:
MPI:https://scc.ustc.edu.cn/2009/1014/c397a3324/page.htm
OpenMP: https://scc.ustc.edu.cn/zlsc/cxyy/200910/t20091014_13081.html
总结
我的主管说:HPC有门槛,但他给人培训HPC时发现:没接触过HPC的人学HPC是会上瘾的。
我对此的评价是:学HPC不仅会上瘾,还会上头。上完头后,还会秃头。
秃头不是我说的,是我这10年的HPC经验沉淀下来的锃亮的脑袋说的。
不开玩笑地说:我觉得任何一个现代程序员最好都学点HPC的知识。因为HPC里面的很多知识在其他领域都用得到,比如最火的AI。
AI里面的通信优化、计算/通信隐藏想法都是HPC玩儿剩下的。
当然说这话,很多做AI的同学可能要来骂我。毕竟谁也不想承认自己做的优化是别人玩儿剩下的。
没关系,你看看我写的博客和我推荐的书就知道我说的对不对了。如果你觉得我说的不对,欢迎来评论区讨论。
既然都看到这儿了,点个赞再走呗。
大家还想了解HPC的哪些内容,也可以在评论区聊聊。
本文最早由本作者发布在知乎,感兴趣的同学也可以关注知乎的原文: https://zhuanlan.zhihu.com/p/683671511