Skip to content

Rewrite screens: adopted and rejected

SPEC §6.2 asks for this record of every screen, adopted or not, so that work is not repeated. The adopted rewrites are the registry records (fastmace/rewrites/, SPEC §6.2 catalogue). This file lists FastMACE's own screens and summarises the research engine's rejected ones.

FastMACE screens

Date Screen Exactness Result Decision Report
2026-10-27 OPT6-T05, radial_tables: certified per-species-pair Chebyshev tables (degree 10, dyadic pieces, values and r-derivatives within 1e-7 of their local scale) for the MH-1 radial chain r → [h c, c] and the edge density; one Triton op with a recomputing backward; LengthsEmbedding in the radial embedding's place certified (new class, owner decision 61): certificate (float32 table error ÷ float32 network error, against float64, w, density and both r-derivatives) 0.15–0.30 on NaCl, NbCl5, NaNbO3; deterministic gate passed (NaCl 0.08 / 0.98 / 0.36, NbCl5 0.11 / 1.05 / 0.41, NaNbO3 0.32 / 1.00 / 0.60); NVE drift unchanged; same-process A/B on the new defaults, both orders, local sm_120: NaCl 0.901 / 0.898, NbCl5 0.915 / 0.916, NaNbO3 0.811 / 0.807 Opt-in (never_automatic, float32 only); default: owner decision docs/validation/opt6-T05.md, results/opt6-T05-radial-tables-20261027/
2026-10-27 OPT8-T01/T01b/T02, fused_folded_forward: the folded radial layer fused into the streaming forward (FP32 SIMT, generated from the streaming schedule), the weights stored for the unchanged chunked backward; full fusion of the backward too (T01) missed its 25 % stop rule exact per MD step b/a NaNbO3 0.93, NbCl5 0.97, NaCl 1.00 (RTX 5060 Ti); L4 0.98 / 0.99; POLAR-1-S 1.00; OMOL-0 1.035 opt-in record (owner), not a default docs/validation/opt8-T01.md, docs/validation/opt8-T02.md
2026-10-27 OPT6-T02 default (owner decision 60): chunked_conv_backward on with streaming_conv and fused_folded_backward; weights of at most 4 L2s unchunked inside the op exact same-process A/B, both orders, local sm_120: NbCl5 0.973 / 0.967, NaNbO3 0.969 / 0.964, NaCl 1.008 / 1.009 (the size rule did not remove NaCl's cost; not profiled) Default on docs/validation/opt6-T02.md
2026-10-27 OPT6-T04: radial tables, accuracy premise and full-step stub ceiling. Per species pair and interaction, the chain r → [h c, c] (Bessel, Agnesi, species embeddings, joint first layer, hidden layers, cutoff) and the edge density as float64-fitted piecewise Chebyshev tables; stub = the table op's [E, 65] traffic only (tools/bench/opt6_radial_stub.py) bounded approximation: float32 table error 0.13–0.57 of the float32 network's against float64 (NumPy; MH-1, 24 of 24 pair × interaction cases); stub timing only stub per force call, same-process, both orders, local sm_120: NaCl 0.897 / 0.898, NbCl5 0.928 / 0.928, NaNbO3 0.839 / 0.843; the 15 October rejection's ceiling (2.3–4.8 %) removed only the hidden layers Ceiling passed; build (OPT6-T05) next; exactness class: owner decision docs/validation/opt6-T04.md, results/opt6-T04-radial-stub-20261027/
2026-10-27 OPT6-T02, chunked_conv_backward: the streaming backward on edge chunks of a quarter of the L2 (l2_chunk_edges; 1,536 on the RTX 5060 Ti) into two slots, the folded layer's input gradient on a side stream; the [E, 1280] weight gradient never formed exact (message, dsh, da bitwise; dx to its atomics), not deterministic (as streaming_conv) force gate passed (NaCl 0.04 / 1.16 / 0.31, NbCl5 0.19 / 1.01 / 0.65, NaNbO3 0.35 / 1.08 / 1.02); same-process A/B, 12 blocks, both orders, local sm_120: NbCl5 0.977 / 0.980, NaNbO3 0.964 / 0.965, NaCl 1.006 / 1.011 Opt-in (default off); default and a small-cell size rule: owner decision docs/validation/opt6-T02.md, results/opt6-T02-chunked-backward-20261027/
2026-10-26 OPT6-T01: L2-resident edge chunks for the second interaction's folded last layer and streaming convolution with the vendored kernels (receiver-range forward, edge-offset backward, chunk scratch for dw, side-stream GEMMs and input gradients; tools/bench/opt6_l2_chunked_conv.py) exact (message, dsh, da bitwise; dx within its atomics' 2.6e-7) local sm_120, real operands, CUDA-graph replays with L2 flush, alternating blocks: chunked backward (1,536 edges) −0.61 ms NbCl5, −0.93 ms NaNbO3 of 4.57 / 7.08 ms; pipelined chunked forward (4,096 edges) a further −0.51 ms on NbCl5 but slower on NaNbO3 at every size (few receivers per chunk); recompute-in-backward slower everywhere; NaCl neutral Falsifier: NbCl5 pass (−1.06 ms), NaNbO3 narrow miss (−0.93 against 1.0); backward-only rewrite (OPT6-T02) proposed, owner decision docs/validation/opt6-T01.md, results/opt6-T01-l2-chunks-20261026/
2026-10-26 Megakernel falsifiers: cuBLASDx FP32 block GEMM; independent GEMM/edge branches on two streams; persistent SM scheduler and radial-producer fusion gates exact (cuBLASDx block GEMM vs cuBLAS) cuBLASDx (MathDx 25.6, SM120→SM89 config) on 64×64×64 block tiles: 1.062× cuBLAS (7.18 vs 7.63 TFLOPS), failing the within-5% primitive gate. Two-stream independent branches: NaCl-like 1.151×, NbCl5-like 0.995×, NaNbO3-like 0.985× — no large-case overlap headroom. Rejected: no cuBLASDx region, persistent scheduler, or radial-producer reopening; the SIMT radial fusion already failed OPT2-T01. docs/validation/opt-5.md §3.12, results/megakernel-falsifiers-20261026/
2026-10-26 Standalone row/col-normalized 3×FP16 on non-sm_120 GPUs (tools/bench/fp16x3_gemm_screen.py, best of four fixed Triton tiles, production gemms.csv geometries) rounding, deterministic Colab A100 (sm_80): FP16×3/cuBLAS weighted per force call 1.69× NaCl, 1.12× NbCl5; coraline RTX A4000 (sm_86): 1.62× / 1.43×; leeloo RTX 4000 Ada (sm_89): 1.71× / 1.33×. Worst cancellation-scaled error vs FP64 is 0.63–0.78× IEEE, so accuracy passes the screen but speed fails everywhere. Colab L4 run cancelled by the owner; leto not used (another user's active rsync). Rejected: no fp16x3_gemms record; production GEMMs stay cuBLAS IEEE FP32. docs/validation/opt-5.md §3.11, results/fp16x3-a100-leeloo-coraline-20261026/
2026-10-26 OPT5-T08 larger-GEMM follow-up: pre-split B, row/column SIMT+MMA partitions, larger tiles, async/staged B, and subgroup-barrier decoupling experimental, unnormalized FP16; not FP32-range-safe Boundary/replay checks pass, but no reliable general cuBLAS speedup; larger shapes remain slower and real-operand cancellation/range checks fail. Occupancy query confirms two blocks/SM for the old controls too. Nsight Compute profile: hybrids lose issue activity (76.6 % → 58–62 %) and FMA-pipe activity (70.2 % → 50–52 %) while the Tensor pipe is active only 23–25 %; barrier stalls rise 0.13 → 0.97–1.92. Named-barrier decoupling (barrier.cta.sync 1,192 / 2,64, disjoint A staging) cuts barrier stalls 1.357 → 0.880 but is 1.8–5.3 % slower than the coupled packed kernel. At the 180 W cap, three one-pass cuBLAS FP16 GEMMs equal the FP32 time before split/scale overhead. Rejected for integration; production unchanged. Separate normalized standalone 3×FP16 path still awaits target-GPU qualification; no NAS/workstation activity. Detailed results
2026-10-26 OPT5-T09: five further GEMM improvement screens (two-kernel concurrent split, BK=32, block swizzling, cuBLASLt/layouts, tensor-only Triton sweep, pre-split operands + fused epilogue) mixed; pre-split path not FP32-range-qualified All negative or neutral on local sm_120: concurrent split 734 vs 501 µs cuBLAS; BK=32/swizzle no general gain; cuBLASLt no gain; best tensor-only Triton 796 µs; pre-split kernel ties cuBLAS (506 vs 501 µs) only before 1,231 µs recurring A preparation. CUTLASS availability-checked, not benchmarked. Rejected / not adopted; production remains cuBLAS IEEE FP32 on sm_120. Detailed results
2026-10-26 OPT5-T09 follow-ups: 4+4 warpgroup setmaxnreg (sm_120a), CUTLASS GeForce SM120 FP16 check, fused producer A-split mixed setmaxnreg variant (165 regs, no spill) beats its spilling 4+4 control by ~29 % (716 vs 1,003 µs) but trails the 6+2 kernel (607) and cuBLAS (531). CUTLASS GeForce FP16 GEMM: 194.5 µs vs cuBLAS FP16 174.5 µs. Fused A-split 174.6 µs (≈ copy cost) but split+GEMM 682 vs 504 µs. Rejected; GEMM-level hybrid work on sm_120 closed. Remaining case is sm_80/sm_89 qualification, paused pending owner permission. Detailed results
2026-10-26 OPT5-T06 & T08: Exponent-shifted 3×FP16 (big = fp16(x), small = fp16((x - fp32(big)) * 2048), c = 3 at 512 FLOP/cycle/SM 16-bit Tensor Core rate) in megakernel_probe.py, standalone Triton (triton_fp16x3_kernel, triton_fp16x3_rowcol_kernel), and fused 64 SIMT + 32 MMA NVRTC kernel (hybrid_gemm_64_32) rounding, deterministic First sm_120 pass of the single-SM co-execution gate: x3 inter fp16 4×4 reaches keep = 0.92, gain = 1.22× (240.5 vs 196.8 FLOP/cycle/SM; gemm upper bound 1.28×). Standalone Triton 3×FP16 is 1.78–1.88× faster than triton_tf32x3 on sm_120 (77.5 µs on NaCl 1512×512×512, matching cuBLAS IEEE's 77.5 µs; 276.5 vs 491.6 µs on NbCl5 5832×512×512). Per-row/col exponent normalization (triton_fp16x3_rowcol) gives 5.02e-7 worst cancellation error across all 52 real MH-1 NaCl products (median 0.568× IEEE, max 1.519× IEEE, 3 of 52 above IEEE—better than tf32x3). Fused 1-stage NVRTC hybrid_gemm_64_32 (127 regs, 0 spill) runs in 80.1 µs (NaCl) and 295.3 µs (NbCl5) with 9.11e-7 max_rel Standalone normalized path documented, awaiting sm_80/sm_89 qualification (docs/design/2026-10-26-fp16x3-and-hybrid-gemm.md, tools/bench/opt5_t08_hybrid_gemm.py); no adoption implied. On sm_120, cuBLAS IEEE stays default; the larger hybrid follow-up above failed. docs/validation/opt-5.md
2026-10-26 OPT5-T07: Time-step delta GEMM ($Y_1 = Y_0 + (A_1 - A_0) B$ across 1 fs steps) and 50/50 channel-magnitude split (IEEE FP32 head on CUDA cores + 1×TF32 or 2×FP16 tail on Tensor Cores) approximate Real MH-1 NaCl force-call operands across a 1 fs 300 K step (Δr ≈ 0.006 Å): intermediate equivariant features change by 20.8 % (median ‖ΔA‖/‖A‖), so 1×TF32 delta GEMM is 1,838× (median) worse than IEEE and 2×FP16 is 482× worse. In 50/50 channel-norm splits, flat weight norms make 1×TF32 tail 1,343× worse and 2×FP16 tail 411× worse than IEEE Rejected (fails accuracy by 400–1,800× on real MACE operands) docs/validation/opt-5.md
2026-10-26 OPT5-T05, uses_tf32x3_tile in tf32x3_gemms: Libra/HC-SpMM hybrid shape dispatch keeping sub-tile atom GEMMs ($\min(K, N) < 32$: $K \in {6, 16}$ species inputs, $N \in {1, 6}$ readout heads, $< 0.4\%$ of FLOPs) on SIMT IEEE FP32 while routing $\min(K, N) \ge 32$ to 3×TF32 Tensor Cores rounding, deterministic local sm_120 (results/opt5-T05-20261026/): cuts worst per-product cancellation-scaled error ratio tf32x3 / ieee from 6.90× → 1.73× (MH-1 NaCl), 6.90× → 1.52× (MH-1 NbCl5), and 2.74× → 1.30× (OMOL-0 XL NaCl; worst max_rel 9.64e-7 vs IEEE 1.23e-6). Force gate passed: MH-1 NaCl energy error drops −39 % (ratio 0.45 → 0.28), NbCl5 −31 % (0.45 → 0.32, force ratio 1.004) Adopted inside opt-in tf32x3_gemms (tf32x3_gemm.py, segment_gemm.py) docs/validation/opt-5.md
2026-10-26 OPT5-T01 & T02: Tacker-style warp-scheduler isolation (sched_iso), asymmetric warp ratios (6×2, 7×1, 2×6), and DeepSeek-style SIMT-split producer + pure-MMA consumer (x3_pipe with bar.arrive 1) in tools/megakernel_probe.py speed / accuracy screen local sm_120: sched_iso caps both units at the sub-partition fraction (gain = 0.72 on 4×4: each sub-partition owns private FFMA + MMA units). x3_pipe cuts registers 205 → 194 (0 spill) and raises concurrent 3×TF32 MMA throughput by +35.6 % (4×4, mma_share 0.56 → 0.76) and +21.3 % (2×6, mma_share 0.73 → 0.89), but on sm_120 (TF32 = FP32 rate) the SIMT split cost lowers s_both (gain = 0.85). Inline PTX cvt.rna.tf32 before tl.dot("tf32") is doubly rounded by Triton Closed on sm_120; producer/consumer mechanism recorded for sm_80 docs/validation/opt5-T01-scheduler-probe.md, docs/validation/opt-5.md
2026-10-26 OPT5-T03 & T04: radial folded last layer 64 + tail streaming Triton kernel (evict_first) and gated_segment_gemm prologue on sm_120 rounding, deterministic local sm_120 graph-replay microbenchmarks (results/opt5-wave1-20261026/): radial 64 + 1 Triton is 160.7 / 1,440.3 / 2,435.8 µs vs cuBLAS K = 64 floor 150.3 / 1,052.6 / 1,546.3 µs (above the 150 / 1,000 / 1,450 µs falsifier limits). gated_segment_gemm forward-only on NbCl5 is 184.33 → 177.44 µs (−3.7 %, below the 5 % falsifier, and backward still needs gated rows as in OPT-T02 stage C) Cut at Wave 1 falsifiers docs/validation/opt-5.md, tools/bench/opt5_microbench.py
2026-10-24 OPT4-T04: grouped_launch (unchanged since f2531cb) on generic MACE, where every block linear's per-l products are [n(2l+1), 128] @ [128, 128] and all small in NaCl rounding, deterministic Force gate passed on omat0-medium (NaCl 1.57 / 1.14 / 0.64, NbCl5 1.38 / 1.13 / 1.03). Same-process A/B, 12 blocks, both orders, main 13a1983, NaCl b/a on the local RTX 5060 Ti (sm_120): omat0-medium 0.9529 / 0.9509, mp0-medium 0.9467 / 0.9546, mpa0-medium 0.9508 / 0.9466, mp0b3-medium 0.9493 / 0.9456, matpes-pbe 0.9507 / 0.9500; omat0-medium NbCl5 1.0008 / 0.9984 (neutral: not grouped by the shape rule). Colab L4 (sm_89) omat0-medium NaCl 0.9593 / 0.9568 (0.87 CU) Adopted: default on for the generic MACE family (owner decision 57, 24 October 2026: every interaction MP-0's residual or the density family's, not PolarMACE; float32, not reproducible). MH-1, MACE-OFF, POLAR-1 and OMOL-0 stay off unless requested (MH-1 sm_89 1.005). No applicability change to the record docs/validation/opt4-T04.md, results/opt4-T04-grouped-launch/
2026-10-24 OPT4-T08: one stage of the force call at reduced precision (bf16/fp16 output, gradient or saved-tensor storage; TF32 forward or backward; autocast; whole stage cast), every other stage FP32 rounding (screen only; MACE's e3nn float32 path as the base) MH-1 NaCl/NbCl5/NaNbO3 and omat0-medium NaCl/NbCl5, gate ratios against the float32 calculator: fp16 storage 2–1,100×, bf16 7–8,000×, TF32 forward GEMMs 2–600×; most sensitive the radial basis, radial MLP and neighbour sums. Passes only ZBL (fp16) and MH-1's interaction-0 symmetric-contraction backward in TF32 (fails on omat0-medium) Not built: no stage with a real share of the step passes alone docs/validation/opt4-T08-precision-sensitivity.md, tools/precision_screen.py
2026-10-24 OPT4-T07: the megakernel gate. A single-SM probe with FP32 FFMA warps beside mma.sync TF32/BF16 warps in one kernel, from register-only up to a 64×64 tensor-core warp tile and an in-kernel 3×TF32 split speed only Gain against the better of all warps on CUDA cores or all on tensor cores, with an FP32-accurate decomposition: RTX 5060 Ti (sm_120) 1.04 with the split measured (keep 0.91); L4 (sm_89) 1.10 (keep 0.92), a no-traffic ceiling; A100 0.92 (keep 0.58: tensor cores alone are 2.2× the CUDA cores) Fail on sm_120 and sm_80. sm_89 passes only at the threshold, and the stage rule needs the reference GPU. Heterogeneous megakernel work does not start docs/validation/opt4-T07-megakernel-probe.md, tools/megakernel_probe.py
2026-10-24 OPT4-T06: the OEq streaming forward's launch shape (block size 32–512, register caps 64/72) on NbCl5 exact (every variant bitwise equal) local sm_120, main 13a1983, ncu: 93.85 % of DRAM peak (414 GB/s), long-scoreboard stalls 92 %, occupancy 50 % (register limit); 802 µs against a 746 µs traffic floor (ceiling 0.26 % of the step). Block sizes 32–256 within 0.2 %, 512 +3.6 %; register caps raise occupancy to 58–67 % and are 0.5–2.1 % slower. OPT-T10's "47 % of DRAM" was ncu's clocks (its 1,681 µs duration against 0.87 ms) Not built (no shape-rule lever; DRAM-bound) docs/validation/opt4-T06.md
2026-10-24 OPT4-T01: a write-bound Triton kernel for the folded radial last layer's forward [E, 65] @ [65, 1280] (Inductor pads it to K = 68 for cuBLAS): all of K in one tile, IEEE tl.dot on 64 columns, the cutoff column as a rank-1 update, the output streamed; 36 tiles, K steps 16/32/64, a persistent TMA-store variant rounding (3.4–3.7e-7 against float64, as cuBLAS) local sm_120 microbenchmark (CUDA-graph replays): best Triton NaCl 190 µs, NbCl5 1,306 µs, NaNbO3 1,913 µs, against cuBLAS 183–186 / 1,270–1,286 / 1,897–1,913 µs and the plan's limits of 150 / 1,000 / 1,450 µs. The store alone runs at the fill_ rate (794 µs NbCl5): the IEEE FP32 dot (about 7.3 TFLOPS) is the limit, not the write. cuBLAS at K = 64 without the cutoff column (1,104 µs) also misses the limit; cuBLAS K = 64 plus addr_ takes 2,650 µs Cut at the falsifying first measurement; no record, gate or A/B docs/validation/opt4-T01.md, results/opt4-T01/local-microbench/
2026-10-24 OPT4-T03 stage 1, tf32x3_gemms: every position-dependent atom GEMM (block linears, segment_gemm, species skip, reassociated first interaction), forward and input gradients, as 3×TF32 through Triton's tf32x3 (one fixed tile, no TF32 flag) rounding, not IEEE-equivalent under cancellation; deterministic Real operands of a force call: worst cancellation-scaled error 4.7–5.7e-7 against cuBLAS IEEE's 6.4e-7–1.0e-6 (MH-1 NaCl, NbCl5; OMOL-0 NaCl). Force gate, local sm_120: MH-1 NaCl ratios 0.45 / 1.09 / 0.38, NbCl5 0.45 / 1.00 / 0.79; OMOL-0 NaCl 1.62 / 1.26 / 0.71; energy offset of one sign, 2–3e-4 meV/atom (MH-1). NVE drift, Colab A100, 20 ps: NaCl 1.4e-7, NbCl5 −5.2e-6 meV/atom/ps (default 1.1e-6, −3.0e-6). Untimed: slower on the A100 (Triton kernel) Stage 1 passed; opt-in record kept (never_automatic). Stage 2 (CUTLASS 3×TF32, A100) not built (owner, 24 October 2026: the A100 is Colab-only) docs/validation/opt4-T03.md
2026-10-24 OPT4-T05, setup and capture time: EngineConfig.dynamic_edges on graph-tier MD plans, so the padded first capture of B reuses the first compiled call's graph instead of compiling the model again (dynamo specialised the first call on the exact edge count) exact: the steps replay the same compiled code (the first warm start with the option hit all 4 FX-graph and 2 AOT-autograd cache entries the default wrote); reproducible=True trajectories bitwise equal to the default through 76 rebuilds local sm_120, untimed starts of fm.md (300 steps): warm MH-1 NaCl 35.2 → 26.7 s, NbCl5 39.7 → 31.3 s, omat0-medium NaCl 28.7 → 21.6 s; cold about 23 s (MH-1) and 18 s (omat0) shorter Adopted (owner decision 59, 24 October 2026): on by default; False restores the second compile docs/validation/opt4-T05.md
2026-10-24 OPT4-T02, fx_e3nn_linear: e3nn's o3.Linear code as an fx graph instead of the TorchScript a checkpoint restores, so dynamo traces PolarMACE's forward (a TorchScript Linear in a loop had sent the whole forward body back to eager, 31 graphs, 538 eager kernels on NaCl) rounding (eager bitwise on the CPU), deterministic POLAR-1-S kernels per force call 1,226 → 642 (NaCl), graphs 31 → 5; POLAR-1 gate passed (S, M and L on NaCl and NbCl5 2×2×2; L's NbCl5 locally after the Colab A100 timed out cold-compiling); with polar_graph_sums, local sm_120 same-process A/B both orders: NaCl 0.7634 / 0.7589, NbCl5 0.8225 / 0.8231; Colab L4 (sm_89) both orders: NaCl 0.8184 / 0.8108, NbCl5 0.8395 / 0.8366. MH-1 hybrid: refused (no TorchScript Linear) Adopted for POLAR-1-S, -M and -L (owner decision 58, 24 October 2026; L after its NbCl5 gate): on under auto for those checkpoints in hybrid float32, non-reproducible plans; off for every other model unless requested docs/validation/opt4-T02.md
2026-10-24 OPT4-T02, polar_graph_sums: PolarMACE's one-graph per-graph sums (Fukui norms, total charges, barycentre) as a sum and a broadcast instead of scatter_add_ and x[batch] (a serial float64 index_put backward, 2.3 ms of NbCl5's 25 ms force call) rounding, deterministic (no atomics) alone: NaCl −8 %, NbCl5 −9 % of the force call's kernel time (untimed profile); on top of fx_e3nn_linear: no further gain (Inductor compiles that backward) Adopted for POLAR-1-S, -M and -L with fx_e3nn_linear (decision 58): deterministic sums, no atomics docs/validation/opt4-T02.md
2026-10-21 OPT3-T03, EngineConfig.fused_integrator: fixed-cell CUDA Langevin's AC/ACP stage (half kick, drift, neighbour checks, compaction, saved velocities, flags) in four Triton kernels around PyTorch's centre-of-mass sums and cumsum, instead of about 45 PyTorch kernels exact (every written buffer byte-identical at stage level; reproducible-mode trajectories bitwise: pipelined, checked, resume) local sm_120 same-process A/B, 300 K: NaCl 0.9758 / 0.9758 (all 24 pairs faster), NbCl5 0.9972 / 0.9929; Modal L4: NaCl 0.9807 / 0.9797, NbCl5 0.9990 / 0.9975 Adopted (owner decision, 21 October 2026): on by default, also in reproducible plans; NPT, CPU and no Triton keep the PyTorch stage docs/validation/opt3-T03.md, results/modal-opt3-T03-L4-20261021/
2026-10-21 OPT3-T04, combo_kernels: Inductor's pointwise combo kernels to cut NaCl's launches inside B rounding (positions, momenta and forces bitwise in the reproducible mode, potential energy 2.1e-6 eV apart) NaCl 264 → 211 kernels per replay, gaps 157 → 128 µs; local sm_120: NaCl 0.991 / 0.982, NbCl5 1.024 / 1.027; Modal L4: NaCl 0.991 / 0.990, NbCl5 1.019 / 1.020 Rejected (NbCl5 slower on both GPUs); opt-in record kept docs/validation/opt3-T04.md
2026-10-21 OPT3-T01: fused gate and residual VJP rounding trace analysis (NbCl5, sm_120): the gate's kernels are already fused and run at DRAM bandwidth; a fused backward removes 55–110 MB per force call, 0.6–1.1 % of NbCl5, before losing Inductor's neighbouring fusions Not built (ceiling about 1 %) docs/design/opt3-T01-gate-vjp-analysis.md
2026-10-21 OPT3-T02: the cuEquivariance symmetric contraction (other cuEq methods, OEq 0.7.0's contraction, fusing its input or output, exact zero paths, reassociation) – Share of the step (local): NaCl 2.5 %, NbCl5 5.4 %, NaNbO3 3.1 %. Its kernels run at 72–96 % of memory speed-of-light and move about the bytes of their [atoms, 16, 512] input and gradient (NbCl5 forward 68–71 MB at up to 422 GB/s). Every option's ceiling is below 3 % (best: removing the input materialisation, about 2.7 % on NbCl5, not buildable as a GEMM epilogue across four per-l products) Screened, not built (build rule: ≥ 3 % ceiling) docs/design/opt3-T02-symmetric-contraction.md
2026-10-20 OPT-T02 stage A, gated_rows: MH-1's residual products, gate and linear_2 on per-segment rows, without the joins and copies between them exact (bitwise on the CPU and in the reproducible GPU mode) same-process A/B, 12 blocks, both orders: murphy (sm_89) NaCl −4.4 %, NbCl5 −9.0 %; local RTX 5060 Ti (sm_120) NaCl −3.7 %, NbCl5 −10.6 %. Force gate passed (NaCl, NbCl5) Adopted, default on wherever merged_residual is (owner decision, 20 October 2026; planner rule on_with_merged_residual). The check of all models (the 19 labels through the gate) runs in the combined acceptance after the round; a model that fails there gets gated_rows switched off docs/validation/opt-T02a-gated-rows.md
2026-10-20 OPT-T02 stage B, segment_gemm: in the gated_rows chains, linear_2's products write straight into its joined output (Triton gathered-row GEMM where the shared shape rule picks it, cuBLAS otherwise), and the interaction's reshape_irreps becomes a view rounding (another GEMM), deterministic same-process A/B on top of gated_rows, 12 blocks, both orders: murphy (sm_89) NbCl5 0.952/0.948, NaCl 0.997/0.996; local (sm_120) NbCl5 0.958/0.957, NaCl 0.997/0.992 (NaCl takes the stock path). Force gate passed Adopted, default on with gated_rows in float32 plans that are not reproducible (owner decision, 20 October 2026; planner rule on_with_gated_rows_float32_unless_reproducible); float64 and reproducible=True keep the stock path. The 19-label gate in the combined acceptance after the round checks all models; a model that fails gets it switched off docs/design/opt-T02-BC-go-no-go.md
2026-10-20 OPT-T02 stage C, gate_prologue: the gate applied inside segment_gemm's Triton GEMM as it loads its rows (A-load prologue), so the gated rows are never stored rounding (values equal segment_gemm's bitwise), deterministic local RTX 5060 Ti (sm_120), pinned 3dc0ca5, same-process A/B on top of gated_rows + segment_gemm, 12 blocks: NbCl5 b/a 1.0196 (a-b, ABAB) and 1.0157 (b-a, ABBA), 23.58 → 24.04 and 23.38 → 23.75 ms; NaCl 0.998 / 0.997 (no product on Triton). The gate tile, gathered by atom and multiplied in registers inside the K loop, costs the GEMM more than the elementwise kernel it removes Rejected (rule: NbCl5 ≤ 0.985 in both orders on both GPUs; it is slower on sm_120, so murphy was not measured). Code kept unmerged on fastmace/opt-T02c (3dc0ca5) docs/design/opt-T02-C-gate-prologue.md §5, results/opt-T02c-gate-prologue/local/stageC-3dc0ca5/
2026-10-21 OPT-T04: checkpoint scan for exact skips (zero weight blocks, unused paths, heads, species) in the 10 benchmark and 5 MACE-OFF checkpoints exact The zeros (4.9–36 % of parameters and buffers) are the symmetric contractions' fixed coupling tensors (U_matrix_*, 94–99.6 % zero), which cuEquivariance already runs sparse; learned weights: no zero linear path, no zero per-species block. Only exact skips: MH-1 product 0's 24 of 512 zero l = 1 channels (< 0.1 ms on NbCl5) and the five unused heads' readout columns (about 0.05 ms) Screened, not built (conductor, 21 October 2026): under 0.5 % together, below the noise floor docs/validation/opt-T04-checkpoint-scan.md (branch fastmace/opt-T04-scan)
2026-10-21 OPT-T03 candidate 2, grouped_launch: in every block linear, the products the shared shape rule calls small run together in one Triton launch (IEEE tl.dot, operands addressed by offset), forward and input gradient; the others keep cuBLAS rounding, deterministic Full-step same-process A/B on top of the defaults (gated_rows, segment_gemm), 12 blocks, pinned cd71b5c. Local RTX 5060 Ti (sm_120): NaCl b/a 1.0179 (a-b) and 1.0103 (b-a), NbCl5 1.0041 and 0.9971. murphy (sm_89): NaCl 1.0697, NbCl5 1.0146 (a-b; b-a cancelled). Force gate passed on murphy (NaCl ratios 1.83, 1.12, 0.79; NbCl5 0.23, 1.02, 0.84). The isolated block-linear bench's gain (1.30–1.34× on sm_120) does not survive in the step. Not profiled; the extra custom-op boundaries (no Inductor fusion across them) and the IEEE Triton GEMM at small M are the likely causes Rejected (it was to speed up NaCl; it slows it on both GPUs). Diagnosed and fixed afterwards (f2531cb: separate outputs, one launch per weight shape): sm_120 NaCl 0.977 / 0.982, sm_89 NaCl 1.005 / 1.003, NbCl5 neutral on both; stays opt-in, no gain on both GPUs (owner request, 21 October 2026) results/opt-T03b-grouped-launch/, docs/design/opt-T03b-diagnosis.md
2026-10-21 OPT2-T04, EngineConfig.overlap_rebuild: a pipelined fixed-cell step's early neighbour rebuild runs on a side stream beside the force graph in flight exact (bitwise in the reproducible GPU mode, 600 steps, 122 rebuilds beside) local sm_120 same-process A/B: NaCl 1000 K 0.964 / 0.967, NaCl 300 K (with step_graph) 0.984 / 0.981, NbCl5 0.993–0.999; Modal L4: NaCl 300 K 0.996 / 0.990, 1000 K 0.988 / 0.987, NbCl5 0.996 / 1.003 Adopted (owner decision, 21 October 2026; OPT-DEF-2): on by default, acts only on pipelined fixed-cell CUDA steps; step_graph stays off docs/validation/opt2-T04.md, results/modal-round2-L4-1176db8/
2026-10-21 OPT2-T03, folded_backward_tiles: the folded last radial layer's Triton input gradient tiled by the waves rule (128-row tiles where the 64-row grid is 2-8 waves) exact (BLOCK_K unchanged: bitwise the same products) local sm_120: NaCl 0.983 / 0.981; Modal L4: NaCl 1.005 / 1.000, NbCl5 1.000 / 1.001 (neutral) Adopted (owner decision, 21 October 2026; OPT-DEF-2): auto = on wherever fused_folded_backward is (MH-1 class) docs/validation/opt2-T03.md, results/modal-round2-L4-1176db8/
2026-10-21 OPT-T08 C1, species_tables: species-only atom-level products (embeddings, projected source/target embeddings, the first interaction's skip_tp and linear_up) as per-species tables gathered each step rounding (bitwise on the CPU), deterministic local RTX 5060 Ti (sm_120), main f993713, same-process A/B on top of the defaults, 12 blocks, off first: NaCl 0.956, NbCl5 0.979 Adopted with C2 and C3 (see the combined row) docs/validation/opt-T08-linear.md
2026-10-21 OPT-T08 C3, fold_product_linear: products.0.linear folded into the linear consumers of layer 0's output, which carries the species (needs C1) rounding, deterministic local sm_120: C1 + C3 NaCl 0.921, NbCl5 0.935 (off first) Adopted (see the combined row) docs/validation/opt-T08-linear.md
2026-10-21 OPT-T08 C2, fold_readout_tail: the last readout's first linear folded into the last product's linear and the last skip_tp (MH-1 class) rounding, deterministic local sm_120: NaCl 0.977, NbCl5 0.991 (off first) Adopted (see the combined row) docs/validation/opt-T08-linear.md
2026-10-21 OPT-T08 C1 + C2 + C3 together rounding, deterministic local sm_120, both orders: NaCl 0.908 / 0.904, NbCl5 0.924 / 0.928; Modal L4 (sm_89): NaCl 0.918 / 0.920, NbCl5 0.922 / 0.920; Modal A100 (sm_80): NaCl 0.907 / 0.896, NbCl5 0.907 / 0.906. First force within the engine's scatter (plain cuEq float64 and hybrid float32); force gate passed on sm_120 (NaCl 0.05, 1.13, 0.33; NbCl5 0.19, 1.02, 0.65) and on the L4 Adopted (owner decision, 21 October 2026, "Make all 3 defaults"; OPT-DEF-2): auto = on where the model takes them (C1, C3: the MH-1 labels; C2: also OMOL-0), in float32 plans that are not reproducible. species_tables is not bitwise on the GPU (reproducible mode: forces differ by 8e-16 eV/Å), so float64 and reproducible plans keep all three off docs/validation/opt-T08-linear.md, results/opt-T08-linear-audit/local-20261021/
2026-10-21 OPT3-T05, layout audit: direct_node_feats (no LAMMPS-only join of node features and attributes, so no strided input copies into the streaming convolution) and folded_constants (the folded radial [W, b] and its halves built once) exact (bitwise on the CPU) NaCl pure data movement 59.4 → 47.8 µs per force call; force gate passed; local sm_120 A/B: NaCl 0.9921 / 0.9948, NbCl5 1.0020 / 1.0020; Modal L4: NaCl 1.0034 / 1.0005, NbCl5 1.0008 / 0.9950 Opt-in; no gain resolved above noise; default is the owner's call docs/validation/opt3-T05-layout-audit.md
2026-10-21 OPT3-T05, lm_major_outer_sum: the reassociated first interaction's outer sums stored (l, m)-major so its per-l GEMM operands are views exact the transpose moves to the join and the gradient slices (input [., 130], output [., 128]): NbCl5 layout kernels 93.2 → 85.9 µs Rejected, reverted docs/design/opt3-T05-layout-audit.md
2026-10-20 OPT-T01: FP32-accurate tensor-core GEMMs (Triton tf32x3 3×TF32; cuBLAS BF16×9; CUTLASS 3×TF32) rounding (3×TF32 error 5.3e-7 against float64, below cuBLAS IEEE's 1.3e-6) sm_89: tf32x3 slower than cuBLAS SIMT FP32 on 89 of 92 production shapes; per force call NbCl5 atom GEMMs 15.6 ms against 10.4 ms, NaCl 3.3 against 1.9 ms. Peak 4096³: cuBLAS FP32 16.3, TF32 38.6, tf32x3 8.4 TFLOPS, so three TF32 products cannot beat FP32 (ceiling 12.9). BF16×9 exists only on compute capability 10.0/10.3. sm_120 (RTX 5060 Ti, 21:47 UTC, pinned 3d301ec): tf32x3 faster on 13 of 92 shapes; per force call NbCl5 24.9 ms against 12.5 ms, NaCl 4.3 against 2.6 ms; peak cuBLAS FP32 16.7, TF32 25.0, tf32x3 7.1 TFLOPS. Rejected (sm_89 and sm_120) docs/validation/opt-T01-tensor-cores.md
2026-10-20 OPT-T01b: tensor-core work beside cuBLAS's SIMT FP32 GEMM (column split or duplicate on two streams, one captured graph) speed only murphy (sm_89, 48 SMs). With the FP32-accurate partner, Triton tf32x3, the combined rate is 0.77–0.85× of cuBLAS FP32 alone on 9720/13608 × 512 × 512 (best split 75/25), 0.98× on 1944 × 512 × 384 and 0.82× on 216 × 512 × 512. Duplicate (both whole products at once): 0.75–0.79× on the large shapes. Only 13–29 % of the shorter part overlaps. Even 1×TF32 (not FP32-accurate) only reaches 1.10–1.36×, mostly because it is 2.3× faster alone. Rejected (rule: < 1.10×). Both GEMMs fill every SM (hundreds of tiles on 48 SMs), so the second stream only gets the first one's tail. Co-resident warps share the schedulers' issue slots and the register file, and tf32x3 spends its own slots on its three products and the operand splits. results/opt-T01b-tensor-core-overlap/murphy/, tools/gemm_overlap_bench.py
2026-10-20 OPT-T03 candidates 1–2: a block linear's independent per-l products on 2 or 4 CUDA-graph branches (cuBLAS), or in one grouped Triton launch exact (streams); rounding (grouped) murphy (sm_89), one MH-1 block linear (4 × 512 → 512), graph replays: streams 0.85–1.11×, grouped 1.00/1.16× on NaCl forward/input gradient (7 % together) and 0.97/1.03× on NbCl5. The four products together already run at 9.6–11.1 TFLOPS on NaCl sm_120 (RTX 5060 Ti, pinned 3d301ec, ~/fastmace-acceptance/opt1-local-t03t01-20261020): streams 0.68–0.98×; grouped 1.34/1.30× on NaCl, 0.97/0.98× on NbCl5 Not built on sm_89 (rule: ≥ 10 % of NaCl's atom GEMM time, no NbCl5 loss). On sm_120 the grouped launch passes for NaCl; behind the shape rule (NaCl-sized products only) it would leave NbCl5 on cuBLAS. Candidate 2 then built behind the shape rule and rejected in the model: see the grouped_launch row docs/design/opt-T03-small-m.md §6
2026-10-20 OPT-T02 stage D: gate backward fused into linear_2's input-gradient epilogue rounding not built: its per-atom reduction needs atomics or whole-atom tiles Rejected (conductor): non-deterministic gradients would break the reproducible mode and the float64 bitwise promise docs/design/opt-T02-fusion.md

The research engine's rejected screens (10–16 October 2026)

ResearchModule Experiments/Langevin_Thermostat/studies/further_optimizations/ and studies/symmetrix_xl/STREAMED_EDGES_RESULTS.md; local RTX 5060 Ti unless noted. Each failed for the reason given, so it should not be repeated without new evidence.

Idea Result Why it failed
GEMM-only autotuning (Inductor max_autotune_gemm) −0.1 to −1.0 % (slower); setup 141–756 s per-shape tuning cost, no gain after species factoring; excluded by SPEC §9.1 anyway
TF32 changes the accuracy production decision: FP32 with TF32 off (SPEC §1)
Grouped node GEMMs ceiling 0.1 ms Triton IEEE-FP32 GEMMs slower than cuBLAS for these shapes
In-place / strided-batched block linear exact; +0.1 to +0.3 ms per step cuBLAS's batched tiles make the l = 3 product 415 against 305 µs; tile choice per GPU would be tuning
Contiguous folded radial weight within noise, twice –
Inductor decompose_mm_pass for the joint radial layer no gain –
Fused radial hidden block (Triton) no gain after the 15 October fix kept as opt-in record fused_radial_hidden
Fused gate/residual VJP (stand-alone kernel) ceiling 2–2.5 % the gate already runs at memory bandwidth; a gain needs fusion into the GEMMs (OPT-T02 now)
Joint-layer Triton input gradient < 0.1 ms; slower on small cells –
Segmented force accumulation 21 µs below the 0.1 ms bar
Activation memory budget < 1 (recompute in the backward) +0.4 to +5.9 ms –
Programmatic dependent launch (triton.enable_pdl) wrong forces in CUDA-graph replays never enable (SPEC §6.2)
Radial sharing between mirror edges ceiling already slower (+1.1 ms NaNbO3) –
Tabulated radial networks ceiling 2.9–5.1 %, approximate would spend force-error budget; not built
Species + Morton atom order no gain features and weights already L2-resident
Skin 0.2 Å, 2 % edge buckets no gain –
Speculative AC+B graph −4 to −15 % (slower) kept as opt-in speculative_graph
L2-resident edge chunks with unpatched OEq much slower OEq 0.7 always returns full-size outputs
Receiver-owned streaming backward; register caps slower –
OpenEquivariance 0.7 symmetric contraction exact, 27–79× slower compiled the hybrid keeps cuEq's contraction
Reduced Clebsch–Gordan basis ≈ 1 % of a 0.7 ms kernel no measurable gain
MACE develop since 0.3.16 PRs 1498, 1641, 1711, 1718 already taken nothing else left