Skip to content

Benchmark new allocators in README figures and unify the 3 s budget#30

Merged
fpedd merged 1 commit into
mainfrom
bench-new-allocators
Jul 7, 2026
Merged

Benchmark new allocators in README figures and unify the 3 s budget#30
fpedd merged 1 commit into
mainfrom
bench-new-allocators

Conversation

@fpedd

@fpedd fpedd commented Jul 7, 2026

Copy link
Copy Markdown
Owner

Add best-fit, simulated annealing, tabu search, and telamalloc to the
README benchmark figures: the hero Pareto plot grows from 8 to 11
allocators (greedy-by-area retired; the size and all variants already
tell the greedy story), the quality plot now compares greedy (size),
best-fit, tabu search, telamalloc, minimalloc, and supermalloc, and the
scaling plot gains telamalloc (best-fit is omitted there because its
curve coincides with greedy). Two palette roles are added: amber for
the Python searchers and teal for telamalloc.

Unify every time-bounded allocator on one default wall-clock budget:
DEFAULT_MAX_SECONDS = 3.0 in allocators/base.py, mirrored by
kDefaultMaxSeconds in src/cpp/allocators/defaults.hpp. Simulated
annealing, tabu search, and telamalloc move from 2 s to 3 s;
supermalloc and minimalloc from 10 s to 3 s. HillClimbAllocator and
GeneticAllocator gain a max_seconds parameter (default 3 s, 0 disables
it): hill climbing checks a monotonic deadline each iteration, and the
genetic loop unrolls DEAP's eaSimple (verified RNG-identical) so it can
stop between generations. The figure script consequently drops its
per-allocator timeout plumbing and runs everything at library defaults.

All assets are regenerated from a fresh run: supermalloc proves
optimality on 10 of 13 hard problems within 3 s (down from 11 at 10 s)
at 97.6% mean efficiency, and mm-G in the README allocation figure
remains proven optimal. The 05 example now also exercises best-fit and
telamalloc.

Add best-fit, simulated annealing, tabu search, and telamalloc to the
README benchmark figures: the hero Pareto plot grows from 8 to 11
allocators (greedy-by-area retired; the size and all variants already
tell the greedy story), the quality plot now compares greedy (size),
best-fit, tabu search, telamalloc, minimalloc, and supermalloc, and the
scaling plot gains telamalloc (best-fit is omitted there because its
curve coincides with greedy). Two palette roles are added: amber for
the Python searchers and teal for telamalloc.

Unify every time-bounded allocator on one default wall-clock budget:
DEFAULT_MAX_SECONDS = 3.0 in allocators/base.py, mirrored by
kDefaultMaxSeconds in src/cpp/allocators/defaults.hpp. Simulated
annealing, tabu search, and telamalloc move from 2 s to 3 s;
supermalloc and minimalloc from 10 s to 3 s. HillClimbAllocator and
GeneticAllocator gain a max_seconds parameter (default 3 s, 0 disables
it): hill climbing checks a monotonic deadline each iteration, and the
genetic loop unrolls DEAP's eaSimple (verified RNG-identical) so it can
stop between generations. The figure script consequently drops its
per-allocator timeout plumbing and runs everything at library defaults.

All assets are regenerated from a fresh run: supermalloc proves
optimality on 10 of 13 hard problems within 3 s (down from 11 at 10 s)
at 97.6% mean efficiency, and mm-G in the README allocation figure
remains proven optimal. The 05 example now also exercises best-fit and
telamalloc.
@fpedd fpedd merged commit b10972a into main Jul 7, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant