Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
606 commits
Select commit Hold shift + click to select a range
fa43e19
docs(amr): tighten AMR comments in touched solver files
sbryngelson Jul 22, 2026
5436431
test(amr): skip 2D_amr_droplet from the Example smoke suite
sbryngelson Jul 22, 2026
20a742c
spike(l0-blocks): L0-as-blocks feasibility, bit-identical CPU+GPU (l0…
sbryngelson Jul 23, 2026
f48fc19
spike(l0-blocks): persistent multi-rank tiling, bit-identical np=1 an…
sbryngelson Jul 23, 2026
2030012
spike(l0-blocks): P2P tile migration primitive, bit-identical across …
sbryngelson Jul 23, 2026
0443fbb
spike(l0-blocks): closed-loop rebalancer (detect->migrate->re-level),…
sbryngelson Jul 23, 2026
29757a8
spike(l0-blocks): beta - tiles own storage, L0 demoted to I/O staging…
sbryngelson Jul 23, 2026
0aabc42
spike(l0-blocks): GPU migration - device pack/unpack for migrate+scat…
sbryngelson Jul 23, 2026
2585175
spike(l0-blocks): real measured-cost feedback (GPU-synced per-tile ti…
sbryngelson Jul 23, 2026
02a3eba
spike(l0-blocks): reflective (symmetry) domain-edge BC for tiles, bit…
sbryngelson Jul 23, 2026
d8576aa
spike(l0-blocks): periodic BC for tiles at np=1 (self-wrap + cross-ti…
sbryngelson Jul 23, 2026
adfdcfb
spike(l0-blocks): periodic BC at np>1 (allreduce rank-0-only periodic…
sbryngelson Jul 23, 2026
46565e5
spike(l0-blocks): smooth rebalancer per-tile cost with an EMA across …
sbryngelson Jul 23, 2026
0351170
spike(l0-blocks): make branch precheck-clean (format pass, param docs…
sbryngelson Jul 23, 2026
884af71
proto(l0-amr-unify): L0 tiles -> level-0 base (rr=1 per-slot override…
sbryngelson Jul 23, 2026
1ebff0e
proto(l0-amr-unify) step1: split amr_max_blocks into amr_max_fine (ca…
sbryngelson Jul 23, 2026
9abd282
test(l0): forced cross-rank tile-migration golden (np=2, fixed dt) - …
sbryngelson Jul 23, 2026
83f7bf0
fix(l0): gfortran/ifx portability - s_l0_copy_coarse_to_tiles q_cons_…
sbryngelson Jul 23, 2026
22bd925
fix(l0): nest mod() under l0_rebalance_interval>0 guard - amdflang in…
sbryngelson Jul 23, 2026
c91ea0c
proto(l0-amr-unify) step2a: add f_l0_slot(k)=l0_slot_off+k helper (id…
sbryngelson Jul 24, 2026
161f77a
proto(l0-amr-unify) step2b: single shared-pool allocator; s_l0_tiles_…
sbryngelson Jul 24, 2026
0203fe5
proto(l0-amr-unify) step2c: AMR initial fine block at slot l0_slot_of…
sbryngelson Jul 24, 2026
7cc3ee3
proto(l0-amr-unify) step2d: s_tvd_rk skips level-0 (tile) slots in AM…
sbryngelson Jul 24, 2026
d586a6d
feat(l0-amr): @:PROHIBIT l0_ntile>0 with amr=T (coexist needs Increme…
sbryngelson Jul 24, 2026
fa2877a
docs(l0-amr): fix stale amr_cur=1 comments; note amr_slot_live coexis…
sbryngelson Jul 24, 2026
5fdd071
inc3(l0-amr): coexist-safe amr_decomp/finalize alloc-free (.not. amr …
sbryngelson Jul 24, 2026
abacb26
inc3(l0-amr): harden coexist scaffolding - gate amr_ref_ratio clobber…
sbryngelson Jul 24, 2026
179ed60
inc(l0-amr): level-0 tile capture guard in s_amr_capture_boundary_flu…
sbryngelson Jul 24, 2026
4983cc9
inc(l0-amr): narrow coexist guard to static single-level any-np (dyna…
sbryngelson Jul 24, 2026
366d321
inc(l0-amr): per-stage tiles->L0 scatter in coexist (fresh coarse sta…
sbryngelson Jul 24, 2026
aca4191
inc(l0-amr): re-enable L0 coarse RHS under coexist with BC+halo (L0-f…
sbryngelson Jul 24, 2026
5fc583a
inc(l0-amr): split fine/tile stage advance into RHS + RK passes (byte…
sbryngelson Jul 24, 2026
295a277
inc(l0-amr): np>1 coexist coupling — cross-rank copy-back + fix coexi…
sbryngelson Jul 24, 2026
75af093
test(l0-amr): add coexist golden regression tests NP1-G + NP2-MIG
sbryngelson Jul 25, 2026
054b435
inc(l0-amr): skip the L0 tile prefix in s_amr_reconcile_slots (audit …
sbryngelson Jul 25, 2026
d815e1c
inc(l0-amr): fill L0 tile multi-dim ghost cells (diagonal corners / e…
sbryngelson Jul 25, 2026
e123ba7
inc(l0-amr): add computed s_amr_rank_decomp + validate vs amr_decomp …
sbryngelson Jul 25, 2026
0a5d9d5
inc(l0-amr): route decomposition consumers through s_amr_rank_decomp …
sbryngelson Jul 25, 2026
5c6f52c
inc(l0-amr): delete replicated amr_decomp table + its MPI_ALLGATHERs;…
sbryngelson Jul 25, 2026
d2f149e
merge upstream master (combustion reactive-burn #1670) into l0-amr; k…
sbryngelson Jul 26, 2026
6bd7009
fix(l0-amr): guard start_idx(2/3) reads in s_amr_validate_decomp behi…
sbryngelson Jul 26, 2026
618823f
inc(l0-amr): add O(overlap) rank-inversion helpers + transitional cro…
sbryngelson Jul 26, 2026
f12da8a
inc(l0-amr): build ovl lists + reflux participants by O(overlap) inve…
sbryngelson Jul 26, 2026
2ea15ad
Merge commit 'bfdc8f5e' into spike/l0-amr-unify
sbryngelson Jul 26, 2026
451a3f3
inc(l0-amr): delete O(P) ovl scan + reflux rank-loops + cross-checks;…
sbryngelson Jul 26, 2026
1b820e4
inc(l0-amr): add O(num_procs) SFC owner cut-points + f_amr_owner + va…
sbryngelson Jul 26, 2026
1708ffc
fix(l0-amr): scope s_amr_validate_owner to level>=1 blocks (level-0 t…
sbryngelson Jul 27, 2026
f1452f3
inc(l0-amr): convert L0 rebalancer greedy->SFC weighted re-cut + reba…
sbryngelson Jul 27, 2026
559ff53
refactor(l0-amr): extract s_amr_sfc_cut shared by fine + tile owner cuts
sbryngelson Jul 27, 2026
a463c54
inc(l0-amr): SFC compute-owner + cut for L0 tiles (storage owner stay…
sbryngelson Jul 27, 2026
6a20916
inc(l0-amr): add amr_fine_cut so f_amr_owner reproduces fine + tile o…
sbryngelson Jul 27, 2026
c053cdf
inc(l0-amr): routed initial fill + compute-owner slot allocation (uni…
sbryngelson Jul 27, 2026
c3f3add
docs(amr): correct stale slot-memory and output claims, document L0 t…
sbryngelson Jul 27, 2026
26adc58
docs(amr): record the swap topology and why hoisting the restore does…
sbryngelson Jul 27, 2026
ea9440c
inc(amr): split reflux out of the per-block advance loop (batching pr…
sbryngelson Jul 27, 2026
400d0b3
docs(amr): correct the batching prerequisites - the RK pass nests swa…
sbryngelson Jul 27, 2026
4cde6bc
docs(amr): record the AMR strong-scaling baseline (the Track 3 'befor…
sbryngelson Jul 27, 2026
0e552bb
inc(amr): make the grid swap re-entrant (batching prerequisite 2 of 2)
sbryngelson Jul 27, 2026
edec1ec
docs(amr): third batching prerequisite - the IGR sigma bounce is save…
sbryngelson Jul 27, 2026
2bffefd
inc(amr): split the IGR sigma save from the seed (batching prerequisi…
sbryngelson Jul 27, 2026
9188204
docs(amr): mark batching prerequisite 3 resolved and state what remains
sbryngelson Jul 27, 2026
d24c290
docs(amr): record that hoisting the restore was measured and has no e…
sbryngelson Jul 27, 2026
46bef79
docs(amr): measure kernel launch count directly - it is the per-block…
sbryngelson Jul 27, 2026
0c0d823
amr(coexist): split the l0_ntile+amr gate into one clause per unimple…
sbryngelson Jul 27, 2026
c115d54
amr(coexist): make dynamic regrid work with L0 tiles at np=1
sbryngelson Jul 27, 2026
ab87d49
amr(restrict): unpack the cross-rank fold-back on the device, not via…
sbryngelson Jul 28, 2026
108d90e
docs(pitfalls): record that a strided GPU_UPDATE section is silently …
sbryngelson Jul 28, 2026
6aadf6f
amr(coexist): support amr_subcycle with L0 tiles
sbryngelson Jul 28, 2026
e96ca62
amr(coexist): derive the static level-2 box from the parent BLOCK, no…
sbryngelson Jul 28, 2026
6c0c622
amr(coexist): restore to the first FINE block after the multi-level b…
sbryngelson Jul 28, 2026
2e7151f
amr(perf): exchange same-rank seam ghosts in one device kernel
sbryngelson Jul 28, 2026
fc3d1e9
amr(perf): fill a fine block's ghost slabs in one kernel
sbryngelson Jul 28, 2026
00db9cb
amr(perf): fuse the multi-fluid alpha-closure ghost slabs too
sbryngelson Jul 28, 2026
404d97b
amr(perf): fuse the remaining three ghost-slab loops
sbryngelson Jul 28, 2026
1895c0e
amr: make the fine-fine seam halo level-selective
sbryngelson Jul 28, 2026
2734961
amr(subcycle): advance level>=2 siblings transposed, with an L2 seam …
sbryngelson Jul 28, 2026
3db24df
amr(subcycle): tile wide level-2 boxes instead of capping to one child
sbryngelson Jul 29, 2026
741af6f
docs(amr): record the measured multi-block baseline and launch attrib…
sbryngelson Jul 29, 2026
e93f23d
docs(amr): retract the regrid cost claim and attribute it by direct m…
sbryngelson Jul 29, 2026
3a71839
amr: add amr_max_grid_size, a rank-independent fine-block size cap
sbryngelson Jul 29, 2026
7b1e493
amr: separate solver allocation bounds from runtime bounds (idwbuff_a…
sbryngelson Jul 29, 2026
8864d7d
docs(amr): design spec for per-level distribution
sbryngelson Jul 30, 2026
b2afa83
Merge upstream/master into up/mega: adopt stage-independent common re…
sbryngelson Jul 30, 2026
8678224
amr: size the m/n/p-keyed solver scratch to the block cap (idwbuff_al…
sbryngelson Jul 30, 2026
a108dd3
amr: let amr_max_grid_size exceed half a rank subdomain
sbryngelson Jul 30, 2026
6832d29
amr: point-to-point parent<->child gather and restrict for level>=2 b…
sbryngelson Jul 30, 2026
8e2768d
docs(amr): active_box multi-rank is now a declared prohibit, not a si…
sbryngelson Jul 30, 2026
d53fac4
amr: point-to-point multi-level reflux for level>=2 blocks
sbryngelson Jul 30, 2026
26e0d08
amr: advance level>=2 blocks per level, not per parent
sbryngelson Jul 30, 2026
cfdd284
amr: give each level its own rank mapping and drop tower co-location
sbryngelson Jul 31, 2026
1f20aee
docs(amr): formalize load balancing at scale and record the step-4 me…
sbryngelson Jul 31, 2026
e36c10a
docs(amr): the step-4 A/B was run too small above np=2 - reclassify a…
sbryngelson Jul 31, 2026
fc53e09
amr: report per-level load balance (max/mean) when load_weight_wrt is on
sbryngelson Jul 31, 2026
3780f30
amr: fix the balance report and correct three stale subcycle docstrings
sbryngelson Jul 31, 2026
be94db3
amr: halve the level>=2 child slot cap once per level, not a fixed /2
sbryngelson Jul 31, 2026
8dca4b6
amr: allow multi-level subcycle with dynamic regrid at num_procs > 1
sbryngelson Jul 31, 2026
3ab65ab
docs(amr): a no-block rank count is not an idleness measurement
sbryngelson Jul 31, 2026
3384911
amr: drop the orphaned seam-halo comment from the checker
sbryngelson Jul 31, 2026
1e07eb6
amr: record the level-3 slot-cap counterfactual at the cap site
sbryngelson Jul 31, 2026
a8b1b7b
amr(bench): add hardcoded IC 299, scattered blobs for load-balance be…
sbryngelson Jul 31, 2026
cfbaceb
amr: tile the brand-new-region child to the slot cap (fixes heap corr…
sbryngelson Jul 31, 2026
d99cbd0
test(amr): cover amr_max_grid_size at multi-level np=2 (golden 00EB793A)
sbryngelson Jul 31, 2026
526f2dc
amr: assert the box/slot-cap invariant, and report box-count imbalance
sbryngelson Jul 31, 2026
c3c674c
Docs: exclude stackoverflow.com from lychee link check (403 to bots)
sbryngelson Jul 31, 2026
2051aa1
amr: make the SFC cut boundary robust to floating-point ties
sbryngelson Jul 31, 2026
c3364a5
amr: keep uninitialized tile-prefix slots out of the fine-level SFC cut
sbryngelson Aug 1, 2026
0e3418e
amr: drop the unused K_box constant
sbryngelson Aug 1, 2026
b1fc067
docs(amr): record the measured cost-model result and requeue the open…
sbryngelson Aug 1, 2026
2a3e453
docs(amr): the scaling ceiling is MFC's, not AMR's - revise the queue…
sbryngelson Aug 1, 2026
d71b9fc
Merge branch 'master' into up/mega
sbryngelson Aug 1, 2026
cfbcead
docs(amr): write down the real exascale blocker - regrid cost scales …
sbryngelson Aug 1, 2026
7636c76
docs(amr): reorganise - blocker first, retract three superseded measu…
sbryngelson Aug 1, 2026
3f75489
amr: one collective per regrid instead of one per box
sbryngelson Aug 1, 2026
83bf457
amr: O(n log n) merge sort for the SFC cut instead of insertion sort
sbryngelson Aug 1, 2026
2f8e51c
docs: record limit 2 (SFC cut sort) as fixed in the AMR scaling plan
sbryngelson Aug 1, 2026
a500b68
amr: golden coverage for amr_max_level = 3, and print fine_work in th…
sbryngelson Aug 1, 2026
27133f1
docs: AMR costs ~31x uniform per cell, and the overhead is per-block
sbryngelson Aug 1, 2026
4ffb3a3
docs: repeat the block-size sweep; time and work move in opposite dir…
sbryngelson Aug 1, 2026
7107697
docs: the packed super-grid is disproved - tiled blocks are already s…
sbryngelson Aug 1, 2026
214a682
docs: AMR box set is rank-invariant; the 2D benchmark case is not
sbryngelson Aug 1, 2026
dec226e
docs: the AMR scaling limiter is cross-rank block adjacency, not per-…
sbryngelson Aug 1, 2026
ea849f7
docs: correct the limiter - AMR overhead does not distribute, it is n…
sbryngelson Aug 1, 2026
df5a612
docs: profiling says the cost is host time and device copies, not ker…
sbryngelson Aug 1, 2026
313dcbc
docs: root cause is s_compute_rhs fixed per-invocation cost, dominate…
sbryngelson Aug 2, 2026
108268c
docs: confirm the per-call copies are sys_size-scaled descriptor traffic
sbryngelson Aug 2, 2026
d212792
docs: pin the per-call copies to metadata by volume and distribution …
sbryngelson Aug 2, 2026
bcab519
amr: hoist the loop-invariant coarse halo exchange out of the per-blo…
sbryngelson Aug 2, 2026
c1f64d8
docs: measured AMR configuration guidance - parameters are worth ~6.9x
sbryngelson Aug 2, 2026
4b784a4
docs: parameters measure 7.0x combined; per-phase imbalance is the la…
sbryngelson Aug 2, 2026
bf7f1c6
amr: raise amr_max_blocks default to 1024 and add runtime configurati…
sbryngelson Aug 3, 2026
cc6cc5d
amr: reject SFC re-cuts that worsen the load gap; record that coarse …
sbryngelson Aug 3, 2026
bca7d41
docs: the AMR per-block tax is dummy-argument mapping, and why conver…
sbryngelson Aug 3, 2026
6122cbd
docs: plan to promote the RHS working set from dummy arguments to mod…
sbryngelson Aug 3, 2026
851055f
docs: MWE results for the promotion design - correctness de-risked 5/…
sbryngelson Aug 3, 2026
ae46193
docs: retract the promotion plan - per-region map cost is irreducible…
sbryngelson Aug 3, 2026
8a7e337
docs: profiled governing law - wall time is set by GPU operation coun…
sbryngelson Aug 3, 2026
c8066bd
docs: the law is two-dimensional - work per kernel decides the regime…
sbryngelson Aug 3, 2026
b423ed9
docs: the latency-bound regime persists at 60% of GCD memory - it is …
sbryngelson Aug 3, 2026
c7cd92d
docs: how AMReX and Parthenon solve this, measured here at 12.4x, and…
sbryngelson Aug 3, 2026
905e9d7
amr: add a dense local index for live slots
sbryngelson Aug 3, 2026
d9a7c28
docs: record the step-1b scoping constraint found by attempting it
sbryngelson Aug 3, 2026
58c8fad
docs: execution plan for the flat store and batched kernels
sbryngelson Aug 3, 2026
cacc14e
amr: add the flat per-block field store and its reserve/finalize
sbryngelson Aug 3, 2026
ac69f41
docs: measured split - AMR-local kernels are a third of launches, and…
sbryngelson Aug 3, 2026
bbf8ec8
amr: migrate the subcycle ghost sources to the flat store
sbryngelson Aug 3, 2026
181e222
docs: fork 1 chosen, 2a landed, and the true scope and payoff of 2b
sbryngelson Aug 3, 2026
5909833
amr: make the flat store authoritative for q_cons, behind a copy bridge
sbryngelson Aug 4, 2026
fc7d2c2
docs: 2b landed - the store-growth hazard it created, and the polymor…
sbryngelson Aug 4, 2026
e7b52f6
amr: batch the same-rank seam exchange into one kernel over all pairs
sbryngelson Aug 4, 2026
c50cbd0
docs: concurrency disproved (0.0% overlap), fusion measured - wall is…
sbryngelson Aug 4, 2026
3c24a54
docs: production-size 3D results - cap exhausted, balance is state of…
sbryngelson Aug 4, 2026
98941d9
docs: proper 3D profile - the 9.1x AMR penalty is 1.38x arithmetic an…
sbryngelson Aug 4, 2026
d80b5a5
riemann: fuse the finalize reshape kernels, 6 regions per block-stage…
sbryngelson Aug 4, 2026
ecd83d4
docs: retract the weno+riemann fusion - at realistic size it is a net…
sbryngelson Aug 4, 2026
ee11a4d
sim: per-phase wall budget for the AMR step, gated on rank_time_wrt
sbryngelson Aug 4, 2026
e64b0bc
docs: AMReX head-to-head - kernel count is not the problem, 19.75 cop…
sbryngelson Aug 4, 2026
a3f76b4
amr: move q_cons_stor into the flat store, deleting its scalar_field …
sbryngelson Aug 4, 2026
724ef4f
riemann: delete flux_n and flux_gsrc_n, reading the flat Riemann buff…
sbryngelson Aug 5, 2026
7e014f2
riemann/amr: delete flux_src_n and size the remaining buffers to what…
sbryngelson Aug 6, 2026
107695d
amr: non-blocking sends in the per-box coarse-patch gather
sbryngelson Aug 6, 2026
b68c727
docs: AMR profiling results - rhs is 82.6% of wall, regrid is 1.9%
sbryngelson Aug 10, 2026
b5fb48b
docs: the per-launch cost is mapped ENTITIES, not launches or bytes
sbryngelson Aug 13, 2026
ab11150
simulation: map(alloc:) the private arrays in hllc and weno (-26.4% o…
sbryngelson Aug 13, 2026
9cca350
docs: AMR action plan - at matched block size the AMReX excess is 2.0…
sbryngelson Aug 15, 2026
fe4d2f2
docs: mark the break-even conclusions provisional - two cap pairs dis…
sbryngelson Aug 15, 2026
d3fe912
docs: cost model rejected - a depends on block size, break-even numbe…
sbryngelson Aug 15, 2026
78a2504
docs: measured a and b directly - cap64 is 2.32x, a depends on block …
sbryngelson Aug 15, 2026
b185c90
docs: four-cap clean measurement - a falls to the uniform arm's, b is…
sbryngelson Aug 16, 2026
251904a
docs: remove self-contradiction - the 31% disproof and 2.74x were alr…
sbryngelson Aug 16, 2026
022abc5
docs: correct the last stale 2.74x in the metric-discipline section
sbryngelson Aug 16, 2026
cfb7bf3
docs: MPI is the symptom - per-rank work skew 33.7% mirrors MPI time,…
sbryngelson Aug 16, 2026
9e18365
docs: rocprof-sys-causal cannot profile MFC - rejects .text FUNCs, ac…
sbryngelson Aug 16, 2026
ae2b172
docs: oracle load-balance ceiling is 5.1% of wall - rebalancing close…
sbryngelson Aug 16, 2026
322603d
Bracket the regrid gather, the per-block swap, and the level-2 parent…
sbryngelson Aug 19, 2026
d696b8c
Make the level-2 parent gather send non-blocking (-17 to -22% wall)
sbryngelson Aug 19, 2026
cc59ad3
docs: rewrite the AMR action plan around the G0 gate results
sbryngelson Aug 19, 2026
45e7212
Bound AMR store growth and compact it after regrid
sbryngelson Aug 20, 2026
7cd6400
Add per-rank phase reporting and finer AMR phase brackets
sbryngelson Aug 20, 2026
d519af9
Document the AMR implementation and the store investigation
sbryngelson Aug 20, 2026
2358c88
Post reflux face receives non-blocking
sbryngelson Aug 21, 2026
7366613
Instrument AMR exchange volumes and split the regrid migration phases
sbryngelson Aug 21, 2026
96e7496
Design the plan-based exchange (T1/S4) and record the T0 closure evid…
sbryngelson Aug 21, 2026
fb11b1b
Revise the plan-based exchange design from four independent audits
sbryngelson Aug 21, 2026
af5ab6e
Re-found the AMR program from the end-state architecture
sbryngelson Aug 21, 2026
3f06825
Record the full-commitment and node-scarcity decisions; add the plann…
sbryngelson Aug 21, 2026
ca360af
Push the received migration stash to device before any mid-rebuild st…
sbryngelson Aug 21, 2026
24a00ae
Land I0 of the plan-based exchange: mesh epoch, tag bases, invariants…
sbryngelson Aug 21, 2026
b08e37f
Add the suite's first np=4 golden: churn-growth blast at ppn=4
sbryngelson Aug 21, 2026
8bd2fc7
Record the verified call-site inventory and the S0 np=4 diagnosis
sbryngelson Aug 21, 2026
a00ee80
Record the S0 v2 weak-scaling table and the W8 device-memory invariant
sbryngelson Aug 21, 2026
0a38a54
Attribute W8: the store-capacity ratchet over global slot indices
sbryngelson Aug 21, 2026
9bcc986
Fix W8: per-rank device memory now tracks the live box set (S0 np=4 c…
sbryngelson Aug 21, 2026
7ca673a
Document the W8 arc: measured facts, the refuted design, and what it …
sbryngelson Aug 21, 2026
86aab06
Write the Phase 1 attack plan with the measured 2.59x split and pre-r…
sbryngelson Aug 21, 2026
c97f5f5
I1a: per-call-site exchange audit across all seven AMR p2p families p…
sbryngelson Aug 22, 2026
e89ff36
Record the M4 verdicts: hardware inert, the straggler is rank-attache…
sbryngelson Aug 22, 2026
c9a98f3
Ledger: mechanism proven, np=8 needs pooling, P1 increment redesigned…
sbryngelson Aug 22, 2026
f722d58
Close the allocator config decision: threshold=0 is the standing defa…
sbryngelson Aug 22, 2026
cc40cd3
Point the P1 redesign at the durable lifetime-audit file
sbryngelson Aug 22, 2026
f5f9933
Pool fine-block q_prim/rhs into one shared advance scratch (P1)
sbryngelson Aug 22, 2026
718d16f
Ledger + constitution: P1 gate results (np=8 first completion, W8 hol…
sbryngelson Aug 22, 2026
190647c
Gather-batching design: S0 np=8 reverses the level-1/level-2 priority…
sbryngelson Aug 22, 2026
3a6f592
Derive the rebuild gather message set up front and assert the per-box…
sbryngelson Aug 22, 2026
a7a0d63
Gather-batching step-2 design: chunked pre-posted exchange, both fami…
sbryngelson Aug 22, 2026
1056e5c
Step-2 design review: fatal same-chunk parent-pack defect found by bo…
sbryngelson Aug 22, 2026
01cc431
Chunk the rebuild gather: pre-posted recvs, plan-driven sends, one wa…
sbryngelson Aug 22, 2026
3de4724
Arm the parent send-size assert on the chunked gather path
sbryngelson Aug 22, 2026
2505d9c
Record the step-2 verdict and the expert-audit re-aim in the AMR ledgers
sbryngelson Aug 22, 2026
7d8cc4a
Add hcid 306: the AMR benchmark blob as a hardcoded IC
sbryngelson Aug 22, 2026
7b7ae5c
Add the [amr-cov] dead-word counters for the gather families
sbryngelson Aug 22, 2026
47460b3
Record the [amr-cov] verdict: clipping promoted ahead of T1
sbryngelson Aug 22, 2026
81bea2e
Close G-B: the AMReX S0 weak-scaling bar is 1.20x/1.15x per np-doubling
sbryngelson Aug 22, 2026
93e5a7d
Ring-clip design for the runtime fill gathers, adversarially reviewed…
sbryngelson Aug 22, 2026
e53db27
Close ring-clip finding F5 by evidence: boundary patches are unreachable
sbryngelson Aug 22, 2026
dc6d412
Ring-clip the runtime fill gathers to the hollow shell
sbryngelson Aug 22, 2026
bd85c79
Stage ring-clip slab metadata through a device-resident buffer
sbryngelson Aug 22, 2026
a797074
Use full-column pool slices in the clipped packs
sbryngelson Aug 22, 2026
dcb1995
Ledger: ring clip landed and bit-correct, wall regression open
sbryngelson Aug 23, 2026
43ba113
Revert the ring clip: amdflang whole-image codegen regression
sbryngelson Aug 23, 2026
873cce6
Add the regrid-cadence containment audit ([amr-cad])
sbryngelson Aug 23, 2026
58c0b61
Right-size the migration pack pools and request array (T1/I4a)
sbryngelson Aug 23, 2026
de12b8d
Split rg:move with mg:slot/pack/unpk/push brackets (I4b pricing)
sbryngelson Aug 23, 2026
180cdf1
Pre-reserve the migration wave's stash slots in one exact-target grow…
sbryngelson Aug 23, 2026
c7de5b6
Ledger: I4b priced (growth, not pack), I4b-a landed, I4b-b deferred b…
sbryngelson Aug 23, 2026
0b36c14
Cadence move validated (int=20, -41% wall); ladder 1.392x/1.993x; rea…
sbryngelson Aug 23, 2026
b554aa2
Ledger: T1 re-priced at int=20 (I2 first); I1b-gather implementation …
sbryngelson Aug 23, 2026
e531d35
Add per-xfer identity headers to the gather trio (T1/I1b-gather)
sbryngelson Aug 23, 2026
bdb00d5
Convert the level-1 stage fill to plan-based waves (T1/I2a)
sbryngelson Aug 23, 2026
cdf78c1
Convert level>=2 parent gathers to per-level F2 waves (T1/I3)
sbryngelson Aug 24, 2026
5537999
Convert the seam-halo cross-rank pairs to per-peer waves (T1/I5-F6)
sbryngelson Aug 24, 2026
37a4d9b
Convert the reflux-face and freg exchanges to single waves (T1/I5-F5)
sbryngelson Aug 24, 2026
083c782
Ledger: the post-wave measurement (np8 -17.7 pct, top rung 1.99x -> 1…
sbryngelson Aug 24, 2026
5ac7b6f
Batch the reflux apply: one kernel per face direction over all level-…
sbryngelson Aug 24, 2026
62bf3e1
Move the regrid stash chain device-side (stash copy, migration pack/u…
sbryngelson Aug 24, 2026
a1ea597
Move the prolongation kernels device-side; delete the per-box slot pu…
sbryngelson Aug 24, 2026
eeee912
Grow the flat store device-natively (no PCIe round trip)
sbryngelson Aug 25, 2026
3c3bbc5
Instrument the stage-fill wave: gw:plan/gw:pack/gw:wait sub-brackets
sbryngelson Aug 25, 2026
c738918
Fix three review findings: IB merge separation, bounded grow transien…
sbryngelson Aug 25, 2026
34296de
Re-land the stepfill ring clip on the wave plan walks (F1 wire -61 pct)
sbryngelson Aug 25, 2026
0bd9222
Adopt the amdflang attributor-cap workaround at the offload link (mir…
sbryngelson Aug 25, 2026
1e3bc7f
Ledger (18): overnight pairs priced the attributor cliff; workaround …
sbryngelson Aug 25, 2026
1414285
Grow the reflux registers device-natively below a transient threshold…
sbryngelson Aug 25, 2026
55e391c
Ring-clip the parent-fill wave (F2): the largest wire family -54 pct,…
sbryngelson Aug 25, 2026
d08dd54
Ledger (21): first inter-node rung 1.594x vs bar 1.192x; restr and th…
sbryngelson Aug 25, 2026
3731eb6
Seam-clip the freg wave (F5b) and sub-bracket restr: sibling-seam fac…
sbryngelson Aug 25, 2026
570f299
Face-selective reflux multicast (F5a): each participant is shipped ex…
sbryngelson Aug 25, 2026
ee155dc
Ledger (25): third rung 1.368x; restr growth is the F7 per-box chain,…
sbryngelson Aug 26, 2026
bc91de5
Run the lock-step restrict fold as per-level waves (F7): the per-box …
sbryngelson Aug 26, 2026
b5194a6
Disable Euler-Euler bubbles under AMR (user decision, simplifies the …
sbryngelson Aug 26, 2026
969a7c4
Ledger (26): fourth rung 1.343x; the F7 chain is dead (restr -74% at …
sbryngelson Aug 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .claude/rules/common-pitfalls.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,37 @@ covered in `docs/documentation/contributing.md`.
`contxb`/`momxb` shorthands are gone. Index positions depend on `model_eqns` and
enabled features — changing either moves ALL indices; never hard-code one.

## AMR levels (silent-index traps)

- **A level-`l` block's fine extent is `amr_ref_ratio**l * (coarse-region width) - 1`, NOT
`amr_ref_ratio*width`.** The `amr_ref_ratio*width` form is correct only for the level-1 initial
block; nested boxes compound by `amr_ref_ratio` per level (`amr_ref_ratio**level`). Every
fine-extent computation uses `amr_ref_ratio**amr_block_level` — geometry
(`s_set_amr_fine_geometry`), the restart-reader extent check, load-weight, `fmul`.
Assuming `amr_ref_ratio*width` rejects level≥2 blocks as corrupt (the exact bug that bit the
multi-level restart reader).
- **"coarse" in the AMR coupling routines means the block's PARENT level (`l-1`), not the
base grid (level 0).** For a level-1 block the parent IS L0; for level≥2 the block folds
to/from its parent block's fine array. `s_amr_gather_coarse_patch`,
`s_interpolate_coarse_to_fine`, and the restrict/reflux path all operate in the
parent-fine frame — assuming L0 silently corrupts level≥2 coupling.
- **The fine advance SWAPS the coarse grid globals (`m/n/p`, `idwint/idwbuff`, coords,
`acoustic_source`, `ab_active`) to a fine block and restores them after — see the SWAP
CONTRACT block at the `sw_*` declarations in `m_amr.fpp`.** Any module-level variable
DERIVED from the grid that a kernel reads during the fine advance must be swapped there or
refreshed per fine call at its use site; if it is `GPU_DECLARE`'d, its DEVICE copy must be
refreshed too. A stale device copy of coarse bounds reads out of range on the fine grid
under **CCE OpenACC only** (NVHPC/CCE-omp evaluate bounds host-side) — this was the `ab_int`
regression, fixed by an unconditional `GPU_UPDATE` in `s_compute_rhs`. `amr_rvw` (cyl_coord
radius weights) is the next candidate, currently safe only via a `m_checker.fpp` gate.
A CPU-only or NVHPC-acc pass proves NOTHING here; this class is CCE-acc-specific.

## GPU

- NEVER put a `GPU_PARALLEL_LOOP` inside a Fortran `block` construct: amdflang compiles
it clean but silently DROPS the region from the device image — the first launch dies
with `HSA_STATUS_ERROR_INVALID_SYMBOL_NAME` naming an `__omp_offloading_*` symbol.
Hoist the kernel into its own module subroutine.
- WARNING: do NOT wrap `GPU_LOOP` in `GPU_PARALLEL` for spatial loops — `GPU_LOOP` emits
empty directives on Cray and AMD, causing silent serial execution. Spatial loops always
use `GPU_PARALLEL_LOOP`/`END_GPU_PARALLEL_LOOP`. Macro API:
Expand All @@ -36,6 +65,15 @@ covered in `docs/documentation/contributing.md`.
- `@:ACC_SETUP_VFs(...)`/`@:ACC_SETUP_SFs(...)` GPU pointer setup compiles only under
Cray. Around MPI: `GPU_UPDATE(host=...)` before send, `GPU_UPDATE(device=...)` after
receive.
- **Never `GPU_UPDATE` a NON-CONTIGUOUS array section.** `GPU_UPDATE(device='[q%sf(a:b,
c:d, e:f)]')` on a sub-box emits correct OpenMP, but AMD flang copies it as
`size(section)` CONTIGUOUS elements starting at the first: only the leading run lands
where it is named and the rest overwrites neighbouring cells with stale data — no error,
no warning. A leading section (`arr(1:n)`, or a fixed trailing index like
`freg(d)%lo(:,:,:,k)`) IS contiguous and safe; anything that strides is not. To move a
sub-box, pack/unpack it with a device kernel (`s_l0_pack_unpack_block`,
`s_amr_restrict_pack_device`) — that is why those exist. Measured: 10 of 60 covered
cells delivered in the AMR cross-rank restrict, mass off 1.4e-5 per regrid.

## Parameters

Expand Down
3 changes: 3 additions & 0 deletions .typos.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ TKE = "TKE"
HSA = "HSA"
infp = "infp"
Sur = "Sur"
thi = "thi" # AMR clustering local: tagged-box hi index (tlo/thi)
alo = "alo" # AMR clustering local: accepted-box lo array (alo/ahi)
thr = "thr" # AMR clustering local: min-separation merge threshold
equil = "equil" # abbreviation for "equilibrium" (flamelet chemistry)
chioces = "chioces" # typo for "choices" - tests constraint key validation
reqires = "reqires" # typo for "requires" - tests dependency key validation
Expand Down
14 changes: 13 additions & 1 deletion cmake/MFCTargets.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,19 @@ exit 0
-fopenmp-assume-threads-oversubscription
-fopenmp-assume-teams-oversubscription
-fopenmp-assume-no-nested-parallelism)
target_link_options(${a_target} PRIVATE -fopenmp --offload-arch=gfx90a -flto-partitions=${MFC_BUILD_JOBS})
# attributor-max-pi-accesses: amdflang generates device code for the WHOLE
# image at link time, and once the image carries enough target regions the
# device link's Attributor exceeds its AAPointerInfo access cap on a
# heavily-shared object. Pointer information then goes pessimistic and
# OpenMPOpt's __kmpc_parallel cleanup fails module-wide: UNTOUCHED kernels
# regenerate with 2.4-4.5x worse ISA (register spills, +512 B LDS in every
# kernel) whenever ANY kernel is added or removed anywhere in the code.
# Raising the cap restores full pointer precision for the whole image and
# makes kernel quality independent of unrelated edits, at the price of a
# longer device link. See docs/documentation/gpuParallelization.md
# ("AMD flang known issues") for the failure signature.
target_link_options(${a_target} PRIVATE -fopenmp --offload-arch=gfx90a -flto-partitions=${MFC_BUILD_JOBS}
"SHELL:-Xoffload-linker -mllvm -Xoffload-linker -attributor-max-pi-accesses=16384")
endif()
endif()

Expand Down
Loading