CS267 · 第 6 课 · James Demmel

模拟中的并行性与局部性(下)

偏微分方程 (PDEs) 是科学计算的核心。本课探讨 PDEs 的显式与隐式求解方法、并行化策略,以及不同算法的复杂度与适用场景。

授课教师:James Demmel

日期:2025-02-06

难度:中等

视频:Lecture 6a Video

回顾

上一课介绍了四类模拟:离散事件系统、粒子系统、ODEs,以及本课的 PDEs。

共性问题:

新需求:可重复性 (Reproducibility)

偏微分方程 (PDEs)

分类

类型 依赖关系 示例
椭圆型 (Elliptic) 稳态,全局空间依赖 静电/引力势:\(V(\text{position})\)
双曲型 (Hyperbolic) 时间依赖,局部空间依赖 声波:\(P(\text{position}, \text{time})\)
抛物型 (Parabolic) 时间依赖,全局空间依赖 热流:\(T(\text{position}, \text{time})\)

热方程 (Heat Equation)

推导

考虑一根均匀材料的杆,两端绝缘。设 \(u(x,t)\) 为位置 \(x\) 时间 \(t\) 的温度:

\[\frac{\partial u(x,t)}{\partial t} = C \cdot \frac{\partial^2 u(x,t)}{\partial x^2}\]

显式方法 (Forward Euler)

离散化时间和空间:

// 用有限差分近似
(u(x,t+dt) - u(x,t))/dt = C * [u(x-h,t) - 2u(x,t) + u(x+h,t)] / h²

// 解出 u(x,t+dt)
u(x,t+dt) = u(x,t) + z * [u(x-h,t) - 2u(x,t) + u(x+h,t)]
// 其中 z = C*dt/h²

简化(设 \(x = j \cdot h\), \(t = i \cdot dt\)):

\[u[j, i+1] = z \cdot u[j-1, i] + (1-2z) \cdot u[j, i] + z \cdot u[j+1, i]\]

矩阵视角

\[u[:, i+1] = T \cdot u[:, i]\]

其中 T 是三对角矩阵:

\[T = I - zL, \quad L = \begin{pmatrix} 2 & -1 \\ -1 & 2 & -1 \\ & \ddots & \ddots & \ddots \\ & & -1 & 2 \end{pmatrix}\]

L 称为 Laplacian(1D)。对于 2D 网格(5-point stencil),L 是五对角的。

显式方法的并行性

数值不稳定性:对于热方程(抛物型),显式方法要求 \(z = C \cdot dt / h^2 \leq 0.5\)。

当 h 很小时,\(dt < 0.5 \cdot h^2 / C\),需要极小的时间步!

隐式方法 (Backward Euler)

// Backward Euler
(u(x,t+dt) - u(x,t))/dt = C * [u(x-h,t+dt) - 2u(x,t+dt) + u(x+h,t+dt)] / h²

// 整理得
(I + zL) * u[:, i+1] = u[:, i]
// 需要求解稀疏线性系统

Trapezoidal Rule(梯形法则)

更好的数值性质:

\[(I + (z/2) \cdot L) \cdot u[:, i+1] = (I - (z/2) \cdot L) \cdot u[:, i]\]

Poisson 方程

椭圆型 PDE 的特例(稳态):

\[\frac{\partial^2 V}{\partial x^2} + \frac{\partial^2 V}{\partial y^2} + \frac{\partial^2 V}{\partial z^2} = 0\]

与引力、静电势密切相关:

2D Poisson 方程的算法

对于 2D 网格(5-point stencil):

\[L = \begin{pmatrix} 4 & -1 & -1 \\ -1 & 4 & -1 & -1 \\ & \ddots & \ddots & \ddots & \ddots \\ & & -1 & -1 & 4 \end{pmatrix}\]

算法比较

算法 串行复杂度 并行复杂度
Dense LU\(N^3\)\(N\)
Band LU\(N^2\)\(N\)
Jacobi\(N^2\)\(N\)
Explicit Inverse\(N\)\(\log N\)
Conjugate Gradient\(N^{3/2}\)\(N^{1/2} \log N\)
Red/Black SOR\(N^{3/2}\)\(N^{1/2}\)
Sparse LU\(N^{3/2}\)\(N^{1/2}\)
FFT\(N \log N\)\(\log N\)
Multigrid\(N\)\(\log^2 N\)
Lower Bound\(N\)\(\log N\)

Multigrid 是最快的!串行复杂度 \(O(N)\),接近理论下界。

核心思想:在粗网格上消除低频误差,在细网格上消除高频误差。

实际性能对比

1024-CPU NCUBE-2 上的对流扩散问题:

Solver CPU Time (s) Mflop/s
Jacobi21241800
Gauss-Seidel8851365
Multigrid7318

结论:算法选择比峰值性能更重要!

实际网格

网格类型

类型 描述
Regular1D/2D/3D 规则网格,基础构建块
Composite多个"弯曲"规则网格在边缘连接
Unstructured任意网格点和连接性
Adaptive (AMR)求解过程中动态调整分辨率

非结构网格的挑战

Adaptive Mesh Refinement (AMR)

在求解过程中动态调整网格分辨率:

矩阵重排序

不同目标需要不同的矩阵排序:

目标 排序策略
并行ism最小化非对角非零元(图分区)
减少 fill-in最小度排序 (Minimum Degree)
改善数值稳定性列主元 (Column Pivoting)

测验

Q1:热方程的显式方法为什么需要极小的时间步?

Q2:Multigrid 算法的串行复杂度是多少?

Q3:隐式方法相比显式方法的主要优点是什么?

Q4:Poisson 方程属于哪种类型的 PDE?

Q5:非结构网格并行求解的主要挑战不包括什么?

要点总结

显式 vs 隐式

显式方法简单但有稳定性限制;隐式方法可取更大时间步但需求解线性系统。

Multigrid 是最优

对于椭圆型 PDE,Multigrid 达到 \(O(N)\) 串行复杂度,接近理论下界。

算法选择至关重要

实际中 Multigrid 比 Jacobi 快 300 倍,尽管峰值 Mflop/s 更低。

非结构网格的挑战

需要专门的工具处理网格生成、分区、求解器设计。

延伸阅读