Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← 工业软件 / Industrial Software

求解器工程 / Solver Engineering

1. 工业求解器工程:从物理方程到体系结构优化 / Industrial Solver Engineering from Physical Equations to Architecture Optimization

2. 生产级求解器架构:模块边界、执行管线与可观测性 / Production Solver Architecture with Module Boundaries, Pipelines, and Observability

3. 结构求解器设计:从单元积分到非线性、动力与接触 / Structural Solver Design from Element Integration to Contact and Dynamics

4. CFD 求解器设计:有限体积、压力速度耦合与并行时间推进 / CFD Solver Design with Finite Volumes and Pressure-Velocity Coupling

5. 求解器数据结构:稀疏矩阵、场布局、Cache、NUMA 与 Ghost 数据 / Solver Data Structures for Sparse Matrices, Fields, NUMA, and Ghost Data

6. CAE 性能分析:CPU、GPU、NUMA、MPI 与 I/O 工具链 / CAE Performance Analysis Across CPUs, GPUs, NUMA, MPI, and I/O

7. 体系结构驱动优化:从性能证据到算法、数据与并行处理 / Architecture-Driven Optimization from Evidence to Algorithms and Parallelism

8. 求解器优化案例:结构算子、CFD 通量与 MPI 强扩展 / Solver Optimization Cases for Structural Kernels, CFD Fluxes, and MPI Scaling

本页目录

工业求解器工程:从物理方程到体系结构优化 / Industrial Solver Engineering from Physical Equations to Architecture Optimization ​

📅 创建时间:2026-07-23
🏷️ 标签:#工业软件 #求解器 #FEA #CFD #性能工程 #体系结构
📚 前置知识:[[/05-solver-basics]] [[../marine-cae/11-discrete-systems-and-matrices]]
📚 相关知识:[[/02-systems-and-performance/03-parallel-computing/00-parallel-computing-overview]] [[/02-systems-and-performance/02-computer-architecture-and-hardware/00-hardware-overview]]


1. 这个专题解决什么问题 ​

理解有限元公式、有限体积离散或 Krylov 迭代,只能说明“知道算法”。工业求解器研发还必须回答:

  • 网格、自由度、场变量和稀疏矩阵怎样组织;
  • 结构与 CFD 求解循环怎样拆成稳定的软件模块;
  • 为什么同一个算法在不同数据布局和硬件上性能差异巨大;
  • 怎样证明瓶颈来自算法、内存、通信或 I/O,而不是凭感觉优化;
  • 怎样保证加速后仍然得到相同且可信的工程结论。

本专题把这条链完整串起来:

text
真实工程问题
→ 物理模型
→ 空间与时间离散
→ 代数系统
→ 求解算法
→ 数据结构
→ CPU / GPU / MPI 执行
→ 性能证据
→ 优化
→ 数值验证与性能回归
1
2
3
4
5
6
7
8
9
10

2. 三个必须分开的问题 ​

2.1 求解器是否收敛 ​

这是数值算法问题。常见证据包括残差下降、增量变小和非线性平衡恢复。

2.2 结果是否正确 ​

收敛不代表正确。错误的材料、边界条件、网格或湍流模型,也可以稳定收敛。正确性需要守恒、平衡、网格收敛、时间步收敛、解析解、试验或其他软件对比。

2.3 程序是否高效 ​

高效需要明确指标:

  • 单步或单次求解时间;
  • 最大可处理自由度或网格规模;
  • 内存、显存占用;
  • 强扩展、弱扩展效率;
  • 每个工程算例的成本和能耗。

优化时必须同时记录这三个维度,不能用更松的收敛容差换取虚假的加速。

3. 工业求解器的共同结构 ​

无论结构、流体、热还是电磁,生产级求解器通常都包含:

text
输入与模型检查
├─ 网格拓扑和几何信息
├─ 材料、物性和模型参数
├─ 边界条件、载荷和初值
└─ 求解与输出配置
        ↓
离散与代数系统
├─ 自由度或场变量编号
├─ 稀疏模式和邻接关系
├─ 单元、控制体或面通量计算
└─ 矩阵、右端项或残差组装
        ↓
迭代驱动
├─ 线性求解
├─ 非线性迭代
├─ 时间推进
└─ 多物理场耦合
        ↓
工程能力
├─ 并行调度和通信
├─ Checkpoint / Restart
├─ 日志和收敛监控
├─ 结果输出
└─ 验证与可追溯性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

结构和 CFD 的差别主要体现在离散算子、矩阵性质和外层迭代;软件工程、并行执行和性能诊断方法具有大量共性。

4. 学习路线 ​

编号章节核心问题
00本篇总览怎样建立完整的求解器工程认知?
01生产级求解器架构一个可维护、可扩展的求解器怎样分层?
02结构求解器设计单元、组装、约束和不同分析类型怎样实现?
03CFD 求解器设计通量、压力速度耦合和时间推进怎样组织?
04求解器数据结构稀疏矩阵、场变量和网格怎样匹配硬件?
05CAE 性能分析应该用什么工具收集什么证据?
06体系结构驱动优化怎样从证据推导合理的优化动作?
07优化案例怎样完成可复现的性能优化闭环?

5. 已有知识怎样复用 ​

数值与物理基础 ​

  • [[/05-solver-basics]]:直接法、迭代法、预条件和非线性;
  • [[../marine-cae/04-cfd-equations]]:CFD 控制方程和有限体积离散;
  • [[../marine-cae/07-fea-from-physics-to-matrix]]:有限元从单元到全局矩阵;
  • [[../marine-cae/11-discrete-systems-and-matrices]]:矩阵对称性、正定性和存储格式;
  • [[../marine-cae/12-serial-and-algorithmic-acceleration]]:串行算法、预条件与降阶优化;
  • [[../marine-cae/13-parallel-acceleration-map]]:不同计算阶段的并行方法映射;
  • [[../marine-cae/14-cpu-gpu-mpi-architecture]]:CPU、GPU 与 MPI 的多层并行架构;
  • [[../marine-cae/15-verification-and-validation]]:仿真可信度。

并行与体系结构基础 ​

  • [[/02-systems-and-performance/03-parallel-computing/02-processor-architecture]]:流水线、SIMD、多核与 GPU;
  • [[/02-systems-and-performance/03-parallel-computing/04-memory-hierarchy]]:Cache、带宽和局部性;
  • [[/02-systems-and-performance/03-parallel-computing/09-distributed-parallelism]]:MPI、域分解和通信;
  • [[/02-systems-and-performance/03-parallel-computing/10-performance-engineering]]:Roofline 和优化闭环;
  • [[/02-systems-and-performance/02-computer-architecture-and-hardware/11-performance-analysis-tools]]:Nsight 等现有工具说明。

实践项目 ​

  • [[/06-other/01-projects/profile/C++/2-StructKernelBench/2-StructKernelBench]]:结构仿真核心算子的 CPU/GPU Benchmark 设计。

本专题不会重复推导所有公式,而是重点解释这些知识怎样进入软件和性能决策。

6. 阅读时持续追问的十个问题 ​

  1. 当前阶段在求什么未知量?
  2. 离散后矩阵或算子具有什么性质?
  3. 外层迭代次数由什么决定?
  4. 单次迭代的主要算子是什么?
  5. 算子受计算、内存延迟还是内存带宽限制?
  6. 数据是否按访问顺序组织?
  7. 线程、GPU 和 MPI Rank 是否负载均衡?
  8. 通信、同步和 I/O 占总时间多少?
  9. 优化是否改变了数值顺序、精度或收敛路径?
  10. 是否用相同输入、容差和正确性标准重新测量?

7. 一条可靠的优化路线 ​

text
定义工程目标
→ 固定输入和正确性标准
→ 建立端到端基线
→ 按阶段计时
→ 定位最大热点
→ 判断算法问题还是实现问题
→ 提出一个可证伪的假设
→ 单点修改
→ 重新测量
→ 检查数值与工程结果
→ 保留或撤销修改
1
2
3
4
5
6
7
8
9
10
11

优先减少无用计算和迭代次数,其次减少数据移动,再考虑并行和指令级优化。一个更合适的预条件器,通常比把低占比循环改写成 SIMD 更有价值。

8. 观察、解释与下一步 ​

观察到什么说明什么下一步检查什么
残差不降或工程量漂移数值或建模问题尚未解决网格、边界、离散、尺度和预条件
迭代次数正常但单步很慢实现、数据移动或硬件利用可能是主因阶段计时、热点、硬件计数器
Kernel 很快但总时间不降优化对象占比小或存在等待端到端时间线、通信和 I/O
并行规模增加但效率下降通信、同步、负载或带宽成为限制最慢 Rank、Halo、归约和 NUMA
加速后工程结果变化精度、次序或停止准则影响了数值路径正确性容差、守恒和收敛历史

9. 学完后的能力检查 ​

  • [ ] 能画出结构和 CFD 求解器的执行流程;
  • [ ] 能解释外层迭代与线性求解器的关系;
  • [ ] 能根据矩阵性质选择直接法、Krylov 方法和预条件器;
  • [ ] 能解释 CSR、BSR、SoA、NUMA 和 Ghost Cell 对性能的影响;
  • [ ] 能选择 CPU、GPU、MPI 和 I/O 分析工具;
  • [ ] 能从 IPC、Cache Miss、带宽、Warp Stall 和通信等待推导下一步检查;
  • [ ] 能设计包含正确性验证的性能实验;
  • [ ] 能说明何时应该停止继续优化。

下一篇:[[01-production-solver-architecture]]

最后更新于:

Pager
上一篇← 工业软件 / Industrial Software
下一篇2. 生产级求解器架构:模块边界、执行管线与可观测性 / Production Solver Architecture with Module Boundaries, Pipelines, and Observability

持续记录,持续成长

Copyright © Tidenflow