New adaptation policy

This commit is contained in:
Efim Beshmenev
2026-08-13 23:42:26 +03:00
parent bbb43dbe57
commit 3770224eaf
16 changed files with 2533 additions and 489 deletions
+48 -5
View File
@@ -1,6 +1,49 @@
# Наблюдения и ограничения
## Что уже установлено
## Текущая focused-постановка
Активное исследование больше не использует старую benchmark-матрицу. Оно
сравнивает только три варианта `AdaptiveSequence<uint32_t, true>` с одинаковым
flat hash: forced vector, forced tiered и resize-bound adaptive. Mixed workload
фиксирован: 97% индексных чтений, 1% hash find (50% hit / 50% miss), 1% вставок
и 1% удалений.
Automatic policy меняет mode, `leaf = ceil(sqrt(N))` и размер hash table только
при изменении логической capacity. Рост capacity идёт `x2`; один shrink-шаг
`/2` выполняется при заполнении 12.5%. Поэтому цена перехода входит в измерение,
но ни storage, ни hash не перестраиваются после каждой отдельной операции.
## Final focused run и cutoff
Baseline focused-run с 7 повторами и 100000 mixed operations подтвердил
локальный crossover между двумя соседними размерами. При `N=2048` mixed median
forced vector равна **31.98M ops/s**, а forced tiered — **32.18M ops/s**:
преимущество tiered по медиане составляет лишь **0.618%**, при этом tiered
быстрее в **4 из 7**, а vector — в **3 из 7** paired repeats. Эта граница
считается неустойчивой и попадающей в шум измерения. При `N=4096` forced tiered
дал **32.53M ops/s**, forced vector — **17.20M ops/s**, а adaptive с включённым
в timer переходом `vector -> tiered`**32.64M ops/s**. Медиана tiered выше
vector в **1.8911 раза**, и tiered быстрее во всех **7 из 7** paired repeats.
Поэтому для текущего `uint32_t` workload принят **cutoff 4096** как первый
однозначный и устойчивый размер в sweep. Это подтверждённый результат
focused-серии, но всё ещё калибруемая граница, а не
универсальная константа для других типов и workload. Полная таблица медиан по
mixed/read/find/insert/erase и методика опубликованы в
[`20260813-focused-resize/README.md`](../results/benchmarks/20260813-focused-resize/README.md);
raw повторы находятся в
[`20260813-focused-resize/baseline.csv`](../results/benchmarks/20260813-focused-resize/baseline.csv).
В CSV 189 строк: у всех строк корректные счётчики операций, checksums совпадают
между тремя кандидатами для каждой пары `(N, repeat)`, а режимы и leaf отдельных
read/find/insert/erase batches записаны отдельными столбцами.
## Historical / retired benchmark evidence
Все результаты ниже относятся к прежним workload, кандидатам и policy. Они
сохранены для аудита истории, но **не участвуют** в выборе текущего cutoff и не
сравнимы напрямую с focused benchmark.
### Что было установлено старой методикой
На Ryzen 9 5900X / MSVC 19.51 quick-tuning дал разные оптимумы, поэтому
фиксированный `leaf=512` отвергнут как итоговая стратегия. Для baseline
@@ -26,7 +69,7 @@
доказательство, а сигнал, что старую таблицу leaf нужно заново проверить на
одинаковом quick holdout с тремя профилями.
## Hysteresis и итоговый quick-checkpoint
### Hysteresis и итоговый quick-checkpoint
После v13 выполнены три контрольные серии:
@@ -138,7 +181,7 @@ adaptive-deferred sequential `uint32` найден устойчивый AVX2 cod
1.85–1.98x относительно baseline во всех пяти повторах при верных checksums.
Он требует отдельного анализа generated code, а не постфактум объяснения SIMD.
## Large-scale sweep до 100 миллионов элементов
### Large-scale sweep до 100 миллионов элементов
Серии [`large v1`](../results/benchmarks/20260811-large-full-12c-v1/README.md)
и [`seed-jittered v2`](../results/benchmarks/20260811-large-n100m-512edit-12c-v2/README.md)
@@ -160,7 +203,7 @@ fixed oracle: до первого перехода он успевал выпо
делят L3/DRAM, а N>1M имеет один repeat на профиль. Поэтому SIMD-профили сохранены
отдельно, но точный AVX2 speedup по этой серии не утверждается.
## Чего пока нельзя утверждать
### Чего нельзя было утверждать по retired-сериям
- Не доказано, что adaptive implementation уже имеет geometric mean > 1 против
лучшего фиксированного контейнера на независимом full holdout.
@@ -183,7 +226,7 @@ fixed oracle: до первого перехода он успевал выпо
зафиксированной версии компилятора project-novec, но не публичный контракт
MSVC и не доказательство отсутствия SIMD внутри CRT или x64 runtime.
## Следующая исследовательская граница
### Бывшая исследовательская граница
Phase-aware hysteresis завершён и прошёл трёхпрофильный quick-validator.
Следующий этап — независимый full holdout с несколькими seeds, affinity/pinning