第6章 并行计算:从多核到GPU


第6章 · 并行计算:从多核到GPU

章节摘要:单核频率触及物理天花板后,算力增长只能靠"更多核心"与"更宽向量"。本章把 Fortran 的并行工具箱分层讲透:协同数组(coarray)在语言层面解决节点间分布式内存并行,OpenMP 用编译指令榨取节点内多核,GPU 卸载处理异构加速。读完本章,你会明白三种模型各解决哪一层问题、怎么选、怎么组合,以及为什么 Amdahl 定律决定了并行化的第一优先级是串行部分。本章的目标不是把你变成并行调参专家,而是让你拿到一张"该在哪一层、用什么工具并行"的决策地图。

学习目标

阅读完本章,你应当能够:

  1. 说出 Amdahl 定律的结论,并据此判断一个程序值不值得并行化
  2. 用协同数组声明分布式数据、完成跨映像的远程访问与同步
  3. 用 OpenMP 指令并行化循环,正确处理私有变量与归约
  4. 说出 DO CONCURRENT 与 OpenMP 的并行语义区别
  5. 了解 OpenMP offload 与 OpenACC 在 GPU 卸载中的角色,以及数据搬移的代价

核心概念速览

金句:并行化的第一原则不是"开多少线程",而是"串行部分有多长"——Amdahl 定律把天花板画在了那里。

子章节导航

6.1 共阵列:语言内建的并行模型

协同数组把分布式内存并行写进语言:方括号语法访问远程映像、同步语句保证一致性。这一节是"PGAS 思维"的完整展开。

6.2 OpenMP多线程与指令级并行

OpenMP 是共享内存并行的标准答案:编译指令标记并行区、私有变量与归约的规则、自动向量化的条件。这一节解决单节点内的性能榨取。

6.3 GPU异构计算与加速器卸载

CPU 与 GPU 的分工、数据搬移为什么常常比计算更贵、OpenMP offload 与 OpenACC 怎么用。这一节把异构计算讲成"计算跟随数据"的工程实践。

子章节之间的逻辑关系

三节按"从大到小"的地图推进:6.1 管多节点(大尺度),6.2 管单节点(中尺度),6.3 管加速器(异构维度)。它们不是三个孤立选项,而是同一程序的三个层次——现实中的超算程序常常三层叠加。每节都绕不开 6.2 强调的串行瓶颈:不管开多少核,串行段决定天花板。

6.1 协同数组(节点间,分布式) │ 组合 ▼ 6.2 OpenMP(节点内,共享内存)──► 6.3 GPU 卸载(异构加速) │ └── Amdahl 定律是三层共同的约束 ​

前置知识与后续延伸

  • 前置知识:第 3 章数组(并行作用的对象几乎都是数组)、第 4 章 pure/elemental 过程(可并行过程的前提)、第 1 章"零开销抽象"哲学。
  • 后续延伸:第 7 章互操作里,MPI 与 C 库混编常与本章模型配合;第 8 章性能调优会把并行后的瓶颈诊断作为重点。

学习本章需要建立一个判断习惯:先问"这段计算值得并行吗",再问"用哪一层并行"。很多项目把大量精力花在调 OpenMP 参数上,最后发现瓶颈根本不在计算,而在数据搬移或串行 I/O——Amdahl 定律早就预告了结果。另一个常见误区是以为并行越多越好:同步点、线程创建、数据搬移都有开销,粒度太小反而变慢。正确的姿势是先用 8.2 的剖析方法找出真正的热点,再决定在哪一层、以多大粒度并行。本章每节末尾都有适用边界,选型时对照它而不是凭直觉。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U