Files
Efim Beshmenev aea6e330e3 Realisation v1
2026-08-11 22:19:34 +03:00

74 lines
3.1 KiB
Markdown

# 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:
```text
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.