章节摘要:要理解并行计算,得先看清它的理论地基和硬件载体。这一章先讲清并行的本质——它不是加速的捷径,而是问题解构的必然,受依赖约束、通信开销、负载均衡三重制约;再用阿姆达尔定律和古斯塔夫森定律界定并行的性能极限。然后进入硬件,讲清从弗林分类法(SISD、SIMD、MIMD)到共享内存、分布式内存、异构加速的体系结构谱系。读完你会对"并行能走多远、被什么拖拽"有清醒认知。
阅读完本章,你应当能够:
并行的性能不取决于峰值算力,而取决于依赖、通信、负载这三重摩擦力能不能被压住。
很多初学者把并行等同于"加机器、加核心、加 GPU",以为硬件堆够了性能自然上来。这是对并行最普遍的误解。真实的并行程序里,性能被三股看不见的力量持续消耗:一是依赖,前后步骤之间存在数据等待,硬并行不了;二是通信,数据在不同计算单元之间搬来搬去,延迟和带宽都要付钱;三是负载,有的单元早早干完空转,有的单元一直忙到收尾,整体时间被最慢的那个决定。这三股力量叠加,使得一台峰值每秒百亿亿次的超算,跑某些真实任务时可能只发挥出峰值的个位数百分比。
阿姆达尔定律用一句话点破本质:只要串行部分占比不为零,加速比就有上限,且与处理器数量无关。这意味着哪怕你有无限多核心,也跑不过"串行段"这道坎。古斯塔夫森定律从另一个角度补充:如果问题规模能随处理器数量同步增大(很多科学计算正是这样),加速比就能近似线性增长。这两个定律不矛盾,它们分别对应"强扩展"和"弱扩展"两种问问题的方式。本章 1.1 会把这套理论地基讲清楚——它决定了任何并行优化的天花板。
理论之外,硬件是承载并行的承重墙。弗林分类法(SISD、SIMD、MISD、MIMD)从指令流和数据流的维度给体系结构画了一张地图,现代 HPC 实际是多种结构的混合。共享内存模型(多核 CPU、统一地址空间)编程简单但扩展性受限于访存带宽和一致性开销;分布式内存模型(集群、超算)能堆到上万节点,但要把数据切分和通信显式写进程序;异构加速器(GPU、FPGA、专用 ASIC)把单位算力推到极致,却引入了主机端与设备端的数据搬运成本。这三类结构没有谁取代谁,HPC 系统是按任务的计算特征去组合它们的——这正是 1.2 要展开的内容。
讲清并行的本质(依赖约束下的协同执行)、阿姆达尔定律和古斯塔夫森定律的含义、强扩展性与弱扩展性的区别,以及为什么增加处理器不一定提速。核心要建立的直觉是:并行加速的瓶颈不在处理器数量,而在串行段、通信开销和负载不均这三股摩擦力。
拆解弗林分类法(SISD、SIMD、MISD、MIMD),共享内存与分布式内存的取舍,以及 GPU 等异构加速器在 HPC 里的角色。重点是看清不同体系结构在编程难度、扩展性、单位算力成本上的权衡,以及为什么现代超算最终长成"多核 CPU 加 GPU 加高速互连"的混合形态。
1.1 讲"理论能走多远"(性能极限),1.2 讲"硬件怎么承载"(体系结构)。前者是天花板,后者是承重墙——先看清极限在哪,再决定用什么硬件去逼近它。理论告诉你加速比的数学上限,硬件告诉你这个上限在工程上能不能兑现。两者合起来,才是判断一个并行方案是否合理的完整依据。
1.1 理论极限(天花板) ──► 1.2 体系结构(承重墙) │ │ └── 知道极限,再用硬件去逼近 ──┘
学这一章时容易掉进几个坑。第一个坑是把并行当成"免费的午餐",以为加核心就一定提速,忽略了通信开销随节点数增长而上升的事实——很多程序在节点数翻倍后反而变慢,根因就在通信量超过了计算量节省。第二个坑是混淆强扩展和弱扩展:在固定问题规模下测出来的加速比曲线,和在同步增大问题规模下测出来的曲线,走向完全不同,拿错指标去对比会得出错误结论。第三个坑是迷信峰值算力,买设备时只看标称的每秒浮点运算次数,却忽略了内存带宽和互连带宽才是实际程序的限制因素,结果机器买回来跑真实任务只有峰值的几分之一。本章会反复用具体例子纠正这些误区,建立起基于真实瓶颈而非纸面参数的判断力。
如果你是第一次接触并行计算,建议先完整读完 1.1 的理论部分,把阿姆达尔定律的推导过程亲手算一遍(哪怕只用一个串行占比 5% 的简单例子),建立"加速比为什么有上限"的体感,再进入 1.2 看硬件。如果你已经有工程经验,可以直接从 1.2 的体系结构对比切入,遇到"为什么共享内存扩展性受限""为什么 GPU 要走异构"这类疑问时,再回到 1.1 找理论解释。无论哪种路径,读完本章后,你应该能用"依赖、通信、负载"这三个词去解释任何并行程序的性能现象,而不是泛泛地说"硬件不够强"。