@@ -177,14 +177,48 @@ Measured on an 8-core Apple M3, Release build, average of 3 runs each,
177177there being only 7 TUs to spread across the pool, not 8, plus thread-pool
178178startup overhead. Peak RSS scales up correspondingly, since parallel runs
179179keep multiple TUs' ASTs alive in memory at once instead of one at a time.
180- Both modes report byte-for-byte identical findings (verified via ` diff ` ),
181- including the same real, pre-existing ` redundant-move-return ` case in
182- spdlog's own ` pattern_formatter-inl.h ` found back in the M4 benchmark.
183-
184- This is one honest number, not a benchmark suite -- see
185- [ ` docs/spec.md ` ] ( docs/spec.md ) §10/§14 for what's deliberately out of
186- scope for the MVP (a benchmark corpus, scaling studies beyond this one
187- data point).
180+ Both modes report byte-for-byte identical findings (verified via ` diff ` ).
181+ (The M4 benchmark's real ` redundant-move-return ` finding in spdlog's own
182+ ` pattern_formatter-inl.h ` no longer surfaces under this toolchain: that
183+ line sits behind ` #if defined(__GNUC__) && __GNUC__ < 5 ` , which Clang
184+ preprocesses out, so it was never actually visible to the analyzer in
185+ this configuration -- not a regression, just a preprocessor conditional
186+ worth being honest about rather than repeating a stale claim.)
187+
188+ ### Scaling study
189+
190+ To see parallel speedup past 8 cores, measured on a 32-vCPU GCP
191+ ` c2d-standard-32 ` VM (Ubuntu 24.04, ephemeral -- provisioned, benchmarked,
192+ and torn down for this one run), average of 3 runs per ` --jobs ` value.
193+ Two corpora, since spdlog's 7 TUs cap meaningful parallelism regardless
194+ of core count:
195+
196+ | ` --jobs ` | spdlog (7 TUs) | speedup | self-scan (53 TUs) | speedup |
197+ | ---| ---| ---| ---| ---|
198+ | 1 | 6.64 s | 1.00x | 189.65 s | 1.00x |
199+ | 2 | 3.77 s | 1.76x | 99.74 s | 1.90x |
200+ | 4 | 3.01 s | 2.20x | 53.32 s | 3.56x |
201+ | 8 | 2.35 s | 2.82x | 28.95 s | 6.55x |
202+ | 16 | 2.35 s | 2.82x | 18.34 s | 10.34x |
203+ | 32 | 2.35 s | 2.82x | 17.52 s | 10.82x |
204+
205+ spdlog plateaus immediately at 8 cores (exactly the 7-TU cap predicted
206+ above -- more threads than TUs buys nothing). Self-scan, with more TUs
207+ than cores at every step up to 32, keeps climbing, but with clearly
208+ diminishing returns past 16 (16 -> 32 only gains ~ 5% more despite
209+ doubling the core count) -- Amdahl's-law-style overhead (the final sort,
210+ thread-pool teardown, and each task's own fixed per-TU setup cost) that
211+ core count alone can't parallelize away. Peak RSS at ` --jobs 32 ` on the
212+ self-scan was ~ 11.1 GiB (vs. ~ 0.98 GiB at ` --jobs 1 ` ) -- a real memory
213+ cost worth knowing about before pointing high job counts at a large
214+ project on a memory-constrained machine. All job counts produced
215+ identical findings (verified via ` diff ` ), including on the demo project
216+ run directly on this VM.
217+
218+ This is still closer to "two honest data points" than a real benchmark
219+ suite -- see [ ` docs/spec.md ` ] ( docs/spec.md ) §14 for what a full suite
220+ (synthetic corpus, cold/warm, scaling * and* memory as first-class
221+ dimensions, regression gating) would still need to add.
188222
189223## Known limitations
190224
0 commit comments