CS267 · 第 5 课 · James Demmel

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

并行性和数据局部性是性能的关键。真实世界的问题天然具有并行性和局部性:许多对象独立运行,依赖近处多于远处,远处依赖可以简化。

授课教师:James Demmel

日期:2025-02-04

难度:中等

视频:Lecture 5 Video

模拟的基本类型

科学计算模拟可以分为四大类:

类型 时间 空间 示例
离散事件系统 离散 离散 Game of Life、制造系统、电路
粒子系统 连续 离散(粒子) N-body、分子动力学
集中参数系统 (ODEs) 连续 离散(变量) 电路模拟、结构力学
分布参数系统 (PDEs) 连续 连续 热传导、流体力学

离散事件系统 (Discrete Event Systems)

基本概念

同步 vs 异步

类型 描述 示例
Synchronous每个时间步评估所有转移函数Game of Life
Asynchronous仅在输入变化时评估(事件驱动)电路模拟、交通仿真

Game of Life 的并行性

每个新网格单元仅依赖于旧网格中的 9 个单元(自身 + 8 邻居)。

并行化策略:Domain Decomposition(区域分解)

网格分区:最小化通信

对于 n×n 网格,p 个处理器:

分区方式 边交叉数
条状 (slab)\(n \cdot (p-1)\)
块状 (block)\(2n(\sqrt{p} - 1)\)

结论:最小化通信 = 最小化分区表面积/体积比

异步模拟的挑战

保守调度 (Conservative):仅模拟到输入消息的最小时间戳。

投机调度 (Speculative/Optimistic):假设无新输入,继续模拟。

粒子系统 (Particle Systems)

基本概念

力的分类

\[\text{force} = \text{external\_force} + \text{nearby\_force} + \text{far\_field\_force}\]

力类型 并行性 通信需求
外力 "尴尬并行"(Embarrassingly Parallel) 无需通信
近邻力 Domain Decomposition 近邻通信
远场力 需要巧妙算法 全对全(All-to-all)

外力:尴尬并行

// 每个粒子独立计算
for each particle p on processor
  apply_external_force(p)
// 可能需要 reduce 计算全局时间步

任意分布均可,局部性不是问题。

近邻力:Domain Decomposition

挑战 1:边界交互

挑战 2:负载不均衡

远场力:从 \(O(n^2)\) 到 \(O(n \log n)\)

Particle-Mesh 方法

  1. 叠加规则网格
  2. 将粒子"移动"到最近网格点(scatter)
  3. 在网格上求解 PDE(FFT、Multigrid)
  4. 从网格插值力到粒子(gather)

复杂度:\(O(n \log n)\) 或 \(O(n)\)

Tree 方法

远处粒子群的力可以近似为单个大粒子:

复杂度:\(O(n \log n)\) 或 \(O(n)\)

集中参数系统 (ODEs)

系统描述

电路示例

状态变量:

方程(KCL、KVL、欧姆定律):

\[\begin{pmatrix} 0 & A & 0 \\ A^T & 0 & -I \\ 0 & R & -I \end{pmatrix} \begin{pmatrix} v_n \\ 0 \\ i_b \end{pmatrix} = \begin{pmatrix} S \\ 0 \\ 0 \end{pmatrix}\]

Solving ODEs:显式方法

假设 ODE 为 \(x'(t) = f(x) = A \cdot x(t)\),其中 A 是稀疏矩阵:

// Forward Euler
x[i+1] = x[i] + dt * A * x[i]  // 稀疏矩阵-向量乘法

优点:简单(只需 SpMV)

缺点:稳定性问题,刚性系统需要极小时间步

Solving ODEs:隐式方法

// Backward Euler
(I - dt*A) * x[i+1] = x[i]  // 需要求解稀疏线性系统

优点:可取更大时间步,尤其适合刚性问题

缺点:每步需要求解线性系统

稀疏矩阵-向量乘法 (SpMV)

CSR (Compressed Sparse Row) 格式:

for each row i
  for k = ptr[i] to ptr[i+1]-1
    y[i] = y[i] + val[k] * x[ind[k]]

并行 SpMV

分区策略:

Owner-Computes 规则:拥有数据的处理器负责计算。

矩阵重排序与图分区

理想结构:块对角矩阵(无通信)

目标:

测验

Q1:粒子系统中,哪种力的计算是"尴尬并行"的?

Q2:对于 2D 网格,哪种分区方式通信量更小?

Q3:Particle-Mesh 方法的主要优势是什么?

Q4:显式方法求解 ODE 的主要缺点是什么?

Q5:并行 SpMV 中,Owner-Computes 规则是什么?

要点总结

模拟分四类

离散事件、粒子系统、ODEs、PDEs。每类有不同的并行化策略。

Domain Decomposition

将物理区域划分给处理器,最小化表面积/体积比以减少通信。

远场力的优化

Particle-Mesh 和 Tree 方法将全对全交互从 O(n²) 降到 O(n log n)。

稀疏矩阵并行

SpMV 是许多算法的核心。图分区决定并行效率和通信量。

延伸阅读