test(bench): record TList<TObject> scan speedup from ARC elision
After commit ffe09b3 (nil-slot _ClassRelease elision), TList<TObject>
hand-rolled scan x 1000 went 131 ms -> 90 ms (~30% improvement) on
the same hardware as the previous entry. Smaller wins on sequential
and random Get for the same workload.
This commit is contained in:
parent
a6c87e33ea
commit
80488bf0a4
|
|
@ -84,3 +84,35 @@ Phases (all ms wall-clock):
|
||||||
* Numbers are within noise of the previous split-program run on
|
* Numbers are within noise of the previous split-program run on
|
||||||
the same hardware; combining the workloads does not perturb
|
the same hardware; combining the workloads does not perturb
|
||||||
timings.
|
timings.
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
2026-05-21 — Graeme @ AMD Ryzen 7 5800X (Linux 6.14)
|
||||||
|
Blaise compiler v0.9.0-dev
|
||||||
|
Commit: ffe09b3 (perf codegen: elide _ClassRelease on provably-nil slots)
|
||||||
|
|
||||||
|
TStringList TList<String>
|
||||||
|
insert 1_000_000 96 ms 90 ms
|
||||||
|
sequential Get(i) x Count 11 ms 11 ms
|
||||||
|
random Get(i) x 1_000_000 19 ms 19 ms
|
||||||
|
for..in over 1_000_000 15 ms 11 ms
|
||||||
|
IndexOf / hand-rolled scan x 1000 600 ms 283 ms
|
||||||
|
|
||||||
|
TObjectList TList<TObject>
|
||||||
|
insert 1_000_000 37 ms 42 ms
|
||||||
|
sequential Get(i) x Count 4 ms 5 ms
|
||||||
|
random Get(i) x 1_000_000 9 ms 12 ms
|
||||||
|
IndexOf / hand-rolled scan x 1000 16 ms 90 ms
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
* Big win on the TList<TObject> hand-rolled scan (~30% faster:
|
||||||
|
131 ms -> 90 ms). Source: nil-slot _ClassRelease elision in the
|
||||||
|
codegen — TList<T>.Get's `Result := Src^` no longer emits a
|
||||||
|
release-on-nil pair, saving one cross-TU call per Get.
|
||||||
|
* Smaller incidental wins on Sequential Get (6->5 ms) and Random
|
||||||
|
Get (13->12 ms) for TList<TObject> from the same change.
|
||||||
|
* TList<String> hand-rolled scan unchanged at 283 ms; the elision
|
||||||
|
applies to class-typed assignments only. Strings get the same
|
||||||
|
treatment if we extend the optimisation to strings in a follow-up.
|
||||||
|
* TStringList.IndexOf dropped 681->600 ms. Cause uncertain; may
|
||||||
|
just be run-to-run noise.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue