1. 大规模CFD并行计算工程导论

当网格规模从几十万单元增长到几千万甚至上亿单元时,单核求解已经无法在可接受时间内完成计算。以典型的三维外流场为例,若网格量为 5000 万单元,采用耦合隐式求解器、每步迭代约需 200 次通量计算,单核每秒大约能处理 5 万单元·迭代,那么单步迭代耗时约为 2000 秒,即 33 分钟;完成 1000 步收敛过程需要约 23 天。而如果使用 256 个计算核心并行,理想情况下单步迭代可压缩到约 8 秒,1000 步约 2.2 小时。这个数量级的差异,正是并行计算在 CFD 工程中不可替代的根本原因。

并行计算的价值不仅在于“算得快”,更在于它改变了工程决策的方式。过去因为算力受限,工程师往往只能使用粗网格、简化模型或二维近似;而在并行环境下,可以在同一物理时间内完成多方案对比、网格无关性验证、湍流模型敏感性分析,甚至把原本用于“等结果”的时间投入到设计空间探索中。因此,大规模 CFD 并行计算工程的核心目标,是让计算资源、网格划分、求解器配置和后处理流程形成一个可重复、可扩展、可诊断的工程体系,而不是单纯追求核数堆叠。

Fluent 并行架构概览

Fluent 的并行架构可以理解为“分区—通信—汇总”三层结构。求解前,网格被划分为多个分区(partition),每个分区分配给一个计算进程(compute node/process);求解过程中,各进程独立计算自己分区内的通量、梯度和方程系数,在需要全局信息时通过 MPI 进行边界数据交换;最后,残差、通量、力和监测数据由主进程(host)汇总输出。理解这一结构,是后续排查并行效率、负载均衡和通信瓶颈的基础。

Fluent 并行求解架构:分区—通信—汇总 Host 主进程 网格读入 · 分区调度 · 残差汇总 · 文件输出 分区分配 Partition 0 网格子域 · 方程求解 局部通量 · 梯度计算 Partition 1 网格子域 · 方程求解 局部通量 · 梯度计算 Partition 2 网格子域 · 方程求解 局部通量 · 梯度计算 Partition N-1 网格子域 · 方程求解 局部通量 · 梯度计算 MPI 通信层:边界数据交换 · 全局归约 · 同步屏障 分区界面通量传递 · 残差全局求和 · 时间步同步 汇总数据 结果输出与监测 残差曲线 · 监测点数据 · 力/力矩 · 流场文件 并行效率 = 单核耗时 / (核数 × 并行耗时) × 100% | 通信开销、负载不均、串行I/O 是效率下降的三大主因 典型工程目标:256 核效率 ≥ 75%,1024 核效率 ≥ 60%

从图中可以看到,并行效率并不只取决于核数。分区数量、分区边界面积、通信频率、负载均衡程度以及 I/O 策略都会直接影响加速比。例如,当分区数量远大于核数时,每个核需要处理多个分区,通信次数增加;当分区边界面积过大时,MPI 消息量上升,计算通信比下降。因此,工程上通常建议分区数等于或略大于物理核数,并尽量使各分区单元数接近。

课程目标与学习路径

本课程围绕“能算、算得快、算得稳、算得准”四个层次展开。第一层是环境与启动:理解 Fluent 并行启动方式、MPI 类型选择、核数与分区设置。第二层是性能调优:掌握网格分区方法、负载均衡策略、通信优化和 I/O 并行化。第三层是稳定性与排障:能够识别并行发散、分区错误、内存溢出和通信死锁等典型问题。第四层是工程化:把并行计算流程固化为可复用的脚本、配置模板和检查清单。

学习路径建议按“单机多核 → 单节点多核 → 多节点集群 → 大规模异构”逐步推进。在单机阶段,重点观察核数与加速比的关系,记录不同分区数下的残差收敛行为;在多节点阶段,重点分析网络延迟、MPI 实现差异和节点间负载均衡;在大规模阶段,则需要关注并行文件系统、任务调度器和容错机制。每一阶段都应保留可对比的基准算例,否则性能变化无法归因。

学习建议:从本章开始,建议准备一个固定的小型基准算例(例如 200 万单元的三维圆柱绕流),后续每章的性能对比都基于同一算例、同一收敛判据和同一硬件环境,这样才能把“感觉变快了”转化为“效率提升了多少”。

需要特别强调的是,并行计算不是“核数越多越好”。当核数增加到一定程度后,通信开销和串行部分会逐渐主导总耗时,出现加速比饱和甚至下降。工程上更关心的是“在给定硬件条件下,如何用最合理的核数和分区策略,在可接受时间内获得可信结果”。这也是本课程后续所有章节的共同出发点。