章节摘要:单核频率触及物理天花板后,算力增长只能靠"更多核心"与"更宽向量"。本章把 Fortran 的并行工具箱分层讲透:协同数组(coarray)在语言层面解决节点间分布式内存并行,OpenMP 用编译指令榨取节点内多核,GPU 卸载处理异构加速。读完本章,你会明白三种模型各解决哪一层问题、怎么选、怎么组合,以及为什么 Amdahl 定律决定了并行化的第一优先级是串行部分。本章的目标不是把你变成并行调参专家,而是让你拿到一张"该在哪一层、用什么工具并行"的决策地图。
阅读完本章,你应当能够:
金句:并行化的第一原则不是"开多少线程",而是"串行部分有多长"——Amdahl 定律把天花板画在了那里。
协同数组把分布式内存并行写进语言:方括号语法访问远程映像、同步语句保证一致性。这一节是"PGAS 思维"的完整展开。
OpenMP 是共享内存并行的标准答案:编译指令标记并行区、私有变量与归约的规则、自动向量化的条件。这一节解决单节点内的性能榨取。
CPU 与 GPU 的分工、数据搬移为什么常常比计算更贵、OpenMP offload 与 OpenACC 怎么用。这一节把异构计算讲成"计算跟随数据"的工程实践。
三节按"从大到小"的地图推进:6.1 管多节点(大尺度),6.2 管单节点(中尺度),6.3 管加速器(异构维度)。它们不是三个孤立选项,而是同一程序的三个层次——现实中的超算程序常常三层叠加。每节都绕不开 6.2 强调的串行瓶颈:不管开多少核,串行段决定天花板。
6.1 协同数组(节点间,分布式) │ 组合 ▼ 6.2 OpenMP(节点内,共享内存)──► 6.3 GPU 卸载(异构加速) │ └── Amdahl 定律是三层共同的约束
学习本章需要建立一个判断习惯:先问"这段计算值得并行吗",再问"用哪一层并行"。很多项目把大量精力花在调 OpenMP 参数上,最后发现瓶颈根本不在计算,而在数据搬移或串行 I/O——Amdahl 定律早就预告了结果。另一个常见误区是以为并行越多越好:同步点、线程创建、数据搬移都有开销,粒度太小反而变慢。正确的姿势是先用 8.2 的剖析方法找出真正的热点,再决定在哪一层、以多大粒度并行。本章每节末尾都有适用边界,选型时对照它而不是凭直觉。