Files
UniversalContainer/results/benchmarks/20260810-bulk-slack-smoke-v13/README.md
T
Efim Beshmenev aea6e330e3 Realisation v1
2026-08-11 22:19:34 +03:00

3.1 KiB

Intermediate checkpoint: bulk slack smoke v13

This is an exploratory checkpoint, not the final benchmark set.

Scope

  • MSVC baseline profile: Release /O2, /MT, compiler default ISA (no /arch:AVX*).
  • compare suite, smoke scale, three repeats.
  • Six value categories and 58 valid workload/size cells per complete candidate.
  • Raw timings, per-cell medians, aggregate scores, and environment metadata are stored beside this file.

std::deque and std::list are external comparison baselines only. The adaptive candidate switches exclusively between vector and tiered storage; std::list uses O(N) traversal to provide the benchmark's index semantics.

Change under test

Bulk construction of tiered storage now fills each leaf to 7/8 capacity rather than 100%. The remaining 1/8 is deliberate insertion slack. Previously the first random insertion into almost every freshly built leaf forced a split and a directory rebuild, so the benchmark measured an avoidable bulk-layout pathology and the policy learned an artificially large leaf size.

Current result

The hierarchical aggregate score is normalized to the best fixed baseline in each cell; higher is better.

Candidate Score
forced tiered, leaf 64 0.39608
forced tiered, leaf 128 0.36662
adaptive, deferred reads 0.34673
adaptive, eager non-const reads 0.32499
forced tiered, leaf 256 0.31051
reserved std::vector 0.29797

The new layout makes 64--128-element leaves the strongest fixed candidates in this smoke matrix. The deferred adaptive candidate is already ahead of the vector baseline, but it is not final: stationary edit traces still show unnecessary vector/tiered reversals and occasional repeated shape rebuilds.

Safe continuation point

  1. Add explicit read/edit phase hysteresis.
  2. Preserve the long-term EWMA across a transition while resetting only new residency evidence; do not relearn from a noisy empty history.
  3. Give full leaf rebuilds a separate, longer residency and a larger minimum improvement than directory-only changes.
  4. Add regression tests requiring at most one storage switch and at most one leaf rebuild on a stationary 30k-edit trace.
  5. Re-run paired adapt, then the three-profile quick holdout (scalar, baseline, AVX2).

Source snapshot hashes

The repository had no initial commit at this checkpoint, so git_head is empty. These hashes identify the relevant source state:

tiered_storage.hpp     EF6086BC3C5A348793BF70008092ABD680611478D577ED05187BE2D3391D2390
adaptive_sequence.hpp  060E7BCFC09B15EB2C20E076CE423EA3360B91915FBDB92A8D21303B1067B42F
adaptation_policy.hpp  9D0A08AE34121C2AB76B62495E479B6C79C0A1C331DDE3269493DAB13E3E6FE9
benchmark.cpp          AA7CA2D0EF5FEAA14BDCD8EAA44449462A8C981535A62F47588798B6D456B893
analyze_results.ps1    3BC214F7C869A99824E94F813FF380B00937DC4BE752FFB20D825F6A51B7866E

adaptive_sequence.hpp received a configuration-rollback safety fix after the timing run. It does not alter the measured fast path, but the benchmark should be repeated after the pending policy work.