DO NOT MERGE — reduce-acc SROA regresses (defeats vec-reduce)
Reduce-accumulator scalar replacement: lower (reduce (fn [acc x] body) (->Rec inits) coll) with a non-escaping record accumulator to a loop carrying the acc fields as scalar vars. Correct (run-reduce-sroa.ss 7/7, make test + shakesmoke green) but a PERF REGRESSION: ray tracer hit-all 38.4s -> ~53s. Root cause: jolt's reduce already iterates a vector with vec-reduce (seq.ss) — a tight index loop over the backing store, zero per-element allocation. Lowering to a (seq)/(first)/(next) loop allocates a seq node per element, trading hit-all's CONDITIONAL ->HitAcc allocation for a per-element seq allocation. The targeted accumulator allocation is also conditional (only on hit improvement), not the dominant per-sphere cost. Kept on this branch for reference; not merged.
This commit is contained in:
parent
4671e1b67e
commit
e2598280fe
4 changed files with 390 additions and 132 deletions
10
Makefile
10
Makefile
|
|
@ -4,7 +4,7 @@
|
|||
# build step. `make test` is the full gate. `make remint` rebuilds the seed after a
|
||||
# source change.
|
||||
|
||||
.PHONY: test ci values corpus unit smoke buildsmoke selfhost sci certify ffi transient infer wp devirt fieldread numwp fieldnum directlink numeric inline shakesmoke remint
|
||||
.PHONY: test ci values corpus unit smoke buildsmoke selfhost sci certify ffi transient infer wp devirt fieldread numwp fieldnum reducesroa directlink numeric inline shakesmoke remint
|
||||
|
||||
# Full gate (dev machine). Includes the self-host byte-fixpoint, which only holds
|
||||
# on the same Chez that minted the seed.
|
||||
|
|
@ -15,7 +15,7 @@ test: selfhost ci
|
|||
# lockfile) — it RUNS correctly on any Chez, but `selfhost` rebuilds it and a
|
||||
# different Chez version may emit byte-different (gensym/order) output, so the
|
||||
# byte-fixpoint is a dev-machine check, not a CI one (jolt-8479).
|
||||
ci: values corpus unit smoke buildsmoke sci ffi transient infer wp devirt fieldread numwp fieldnum directlink numeric inline certify
|
||||
ci: values corpus unit smoke buildsmoke sci ffi transient infer wp devirt fieldread numwp fieldnum reducesroa directlink numeric inline certify
|
||||
@echo "OK: CI gates passed"
|
||||
|
||||
# Self-host fixpoint: bootstrap.ss rebuild == checked-in seed.
|
||||
|
|
@ -92,6 +92,12 @@ numwp:
|
|||
fieldnum:
|
||||
@chez --script host/chez/run-fieldnum.ss
|
||||
|
||||
# Reduce-accumulator scalar replacement: a reduce over a non-escaping record
|
||||
# accumulator lowers to a seq loop carrying the acc fields as scalar vars, so the
|
||||
# per-step record allocation goes away; the result matches the ordinary reduce.
|
||||
reducesroa:
|
||||
@chez --script host/chez/run-reduce-sroa.ss
|
||||
|
||||
# Direct-linking emission: a closed-world build binds top-level app defs to jv$
|
||||
# Scheme bindings and routes app->app calls/refs to them, skipping var-deref +
|
||||
# jolt-invoke; ^:dynamic/^:redef and nested defs opt out.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue