[experiment] mpi×omp 加速比基准 + 据此重跑匹配拓扑消 size=8 plateau #1

开放中
TiMidlY2026-06-14 17:19:04 +08:00创建 · 0评论
所有者

背景:SU2-Quantum = SU2 8.3.0 "Harrier" 分支,研究量子门噪声 / 有限比特精度对 CFD 的影响(每步隐式线性解后对守恒量增量做 3-D 实数 FFT、谱空间截断/扰动再变回)。参考算例 = 3-D Taylor–Green Vortex (TGV)。术语见 docs/glossary.md,总览 docs/index.md,工作流 docs/tgv-workflows.md,HPC docs/hpc-sweeps.md

约定(接手必读):① 正式/出结果的 Job 必须从 develop,manifest 的 git sha ∈ develop;feature 分支仅临时测试。② 下游机(BSCC-M9 HPC、1810 WSL)ff-only 拉取、不本地提交;若 dirty/未推送先无损 push 到 origin。③ 原始数据/派生图不入 git;每个 Job 一个 run_dir+manifest.json(权威),登记进 private/lab/jobs.md(数据单元)与 private/lab/experiments/<slug>.md(研究单元,uses-jobs:[...],Job⇄Experiment 多对多)。

目标

先做一个 mpi×omp 加速比基准,据此(throughput/efficiency)选定 canonical 拓扑,再用它重跑、消除 size=8 的 L2「误差底」(plateau)

为什么

size=8 列在大 sfreq 处 L2 锁定在 ~1.4%、不降到 0。已确认根因是 config 漂移——baseline (HQ job 26, 8 MPI×4 OMP, 56 cases) 与 correction (HQ job 29, 2 MPI×2 OMP, 672 cases) MPI 拓扑不同 → 浮点累加顺序不同 → 初值差 ~5e-5 → 演化放大到 ~1.4%。不是 FT filter bug(单 rank 受控实验里 FT_SFREQ=1024 与 FT_MODE=NONE 每 iter KE 字节级一致)。L2 在精确算术下与拓扑无关,所以要消除就得让两个 sweep 拓扑一致。详见 docs/experiments/mpi-reproducibility.md
(注:headline 拟合已排除 N=8,所以 plateau 不影响主结论,只影响 published 热图 size=8 那列的观感。)

任务 A — 加速比基准

  • 配置:平时的 tgv/config.cfg,只改 mpi×omp + 短运行;Re=400 固定。
  • 短运行TIME_ITER=30,丢前 ~5 iter warmup,取后 25 的 median s/iter(比设 MAX_TIME 更可控、跨 N/机可比)。
  • N(两个代表性 size,均在 sweep 集内)N=48(中、compute-bound)+ N=96(大)。
  • 12 个 combos(全 ≤8×4=32 核)mpi∈{1,2,4,8} × omp∈{1,2,4} = 1×1,1×2,1×4, 2×1,2×2,2×4, 4×1,4×2,4×4, 8×1,8×2,8×4。
  • 两机BSCC-M9(节点 256 核,partition amd_m9_768)+ 1810(60 物理核 / 120 逻辑,Xeon 8369B)。两机都 ≥32 核 ⇒ combos 对称、可直接对比。
  • 产出:每 (machine, N, mpi, omp) 一行 → s/iterspeedup S(p)=t(1)/t(p)efficiency E=S/p。写成 CSV + 图(新增 analysis/scaling/,PEP-723 自包含脚本,风格同 analysis/ 其它子目录)。登记进 private/lab/(jobs.md 每个基准 run 一行 + experiments/mpixomp-scaling.mduses-jobs:[...])。
  • 运行数 = 12 × 2 N × 2 机 = 48;big-N 低核(1×1/1×2@N=96)偏慢,必要时可跳。

任务 B — 据此决定 canonical 拓扑 + 重跑消 plateau

  • 从 efficiency/throughput 曲线选定 canonical (mpi,omp)(对共享节点,packing 吞吐通常比单 case 速度更重要)。
  • 重跑较便宜的一侧匹配另一侧拓扑:baseline 只有 56 cases,按 canonical 重跑它(而非重跑 672-case 的 correction)→ size=8 plateau 归零、跨 sweep 漂移消失。
  • 提交时用 tgv/submit.py --compare-with <manifest_or_run_dir> 强制拓扑一致(已实现,见 docs/hpc-sweeps.md §6.8)。

验收

  • 基准 CSV + 图产出,登记进 private/lab/
  • canonical 拓扑选定并写进文档(docs/hpc-sweeps.md + private/machines.md 的逐机推荐)。
  • 重跑完成(或给出明确"暂不重跑、用 mask"的书面决定);size=8 plateau 归零或在 published 图中灰掉+caveat。

参考

  • docs/experiments/mpi-reproducibility.md(plateau 根因、复现配方)
  • docs/walltime-scaling.md(s/iter ∝ N^~2.8 的 32 核 scaling)
  • tgv/submit.py--compare-with--ntasks/--omp)、tgv/run.pytgv/runner.py
  • docs/experiments/cfl-time-step.md §2.7(mock N+1、per-N dt)
> **背景**:SU2-Quantum = SU2 8.3.0 "Harrier" 分支,研究量子门噪声 / 有限比特精度对 CFD 的影响(每步隐式线性解后对守恒量增量做 3-D 实数 FFT、谱空间截断/扰动再变回)。参考算例 = 3-D Taylor–Green Vortex (TGV)。术语见 `docs/glossary.md`,总览 `docs/index.md`,工作流 `docs/tgv-workflows.md`,HPC `docs/hpc-sweeps.md`。 > > **约定(接手必读)**:① 正式/出结果的 Job **必须从 `develop` 跑**,manifest 的 git sha ∈ develop;feature 分支仅临时测试。② 下游机(BSCC-M9 HPC、1810 WSL)**ff-only 拉取、不本地提交**;若 dirty/未推送先无损 push 到 origin。③ 原始数据/派生图**不入 git**;每个 Job 一个 `run_dir`+`manifest.json`(权威),登记进 `private/lab/jobs.md`(数据单元)与 `private/lab/experiments/<slug>.md`(研究单元,`uses-jobs:[...]`,Job⇄Experiment 多对多)。 ## 目标 先做一个 **mpi×omp 加速比基准**,据此(throughput/efficiency)选定 canonical 拓扑,再用它重跑、消除 **size=8 的 L2「误差底」(plateau)**。 ## 为什么 size=8 列在大 sfreq 处 L2 锁定在 ~1.4%、不降到 0。已确认根因是 **config 漂移**——baseline (HQ job 26, **8 MPI×4 OMP**, 56 cases) 与 correction (HQ job 29, **2 MPI×2 OMP**, 672 cases) **MPI 拓扑不同** → 浮点累加顺序不同 → 初值差 ~5e-5 → 演化放大到 ~1.4%。**不是 FT filter bug**(单 rank 受控实验里 FT_SFREQ=1024 与 FT_MODE=NONE 每 iter KE 字节级一致)。L2 在精确算术下与拓扑无关,所以要消除就得让两个 sweep **拓扑一致**。详见 `docs/experiments/mpi-reproducibility.md`。 (注:headline 拟合已排除 N=8,所以 plateau 不影响主结论,只影响 published 热图 size=8 那列的观感。) ## 任务 A — 加速比基准 - **配置**:平时的 `tgv/config.cfg`,只改 mpi×omp + 短运行;`Re=400` 固定。 - **短运行**:`TIME_ITER=30`,丢前 ~5 iter warmup,取后 25 的 **median s/iter**(比设 MAX_TIME 更可控、跨 N/机可比)。 - **N(两个代表性 size,均在 sweep 集内)**:`N=48`(中、compute-bound)+ `N=96`(大)。 - **12 个 combos(全 ≤8×4=32 核)**:`mpi∈{1,2,4,8} × omp∈{1,2,4}` = 1×1,1×2,1×4, 2×1,2×2,2×4, 4×1,4×2,4×4, 8×1,8×2,8×4。 - **两机**:**BSCC-M9**(节点 256 核,partition `amd_m9_768`)+ **1810**(60 物理核 / 120 逻辑,Xeon 8369B)。两机都 ≥32 核 ⇒ combos 对称、可直接对比。 - **产出**:每 (machine, N, mpi, omp) 一行 → `s/iter`、`speedup S(p)=t(1)/t(p)`、`efficiency E=S/p`。写成 CSV + 图(新增 `analysis/scaling/`,PEP-723 自包含脚本,风格同 `analysis/` 其它子目录)。登记进 `private/lab/`(jobs.md 每个基准 run 一行 + `experiments/mpixomp-scaling.md`,`uses-jobs:[...]`)。 - 运行数 = 12 × 2 N × 2 机 = 48;big-N 低核(1×1/1×2@N=96)偏慢,必要时可跳。 ## 任务 B — 据此决定 canonical 拓扑 + 重跑消 plateau - 从 efficiency/throughput 曲线选定 **canonical (mpi,omp)**(对共享节点,packing 吞吐通常比单 case 速度更重要)。 - **重跑较便宜的一侧匹配另一侧拓扑**:baseline 只有 56 cases,按 canonical 重跑它(而非重跑 672-case 的 correction)→ size=8 plateau 归零、跨 sweep 漂移消失。 - 提交时用 `tgv/submit.py --compare-with <manifest_or_run_dir>` 强制拓扑一致(已实现,见 `docs/hpc-sweeps.md §6.8`)。 ## 验收 - [ ] 基准 CSV + 图产出,登记进 `private/lab/`。 - [ ] canonical 拓扑选定并写进文档(`docs/hpc-sweeps.md` + `private/machines.md` 的逐机推荐)。 - [ ] 重跑完成(或给出明确"暂不重跑、用 mask"的书面决定);size=8 plateau 归零或在 published 图中灰掉+caveat。 ## 参考 - `docs/experiments/mpi-reproducibility.md`(plateau 根因、复现配方) - `docs/walltime-scaling.md`(s/iter ∝ N^~2.8 的 32 核 scaling) - `tgv/submit.py`(`--compare-with`、`--ntasks`/`--omp`)、`tgv/run.py`、`tgv/runner.py` - `docs/experiments/cfl-time-step.md §2.7`(mock N+1、per-N dt)
登录并参与到对话中。
1位参与者
通知
到期时间
到期日期无效或超出范围。请使用“yyyy-mm-dd”格式。

未设置到期时间。

依赖议题

未设置依赖项。

引用
TiMidlY/SU2-Quantum#1
没有提供说明。