Repository navigation
DiskANN v0.62.0
Highlights
- Multi-vector search: Added
build_minmax_max_sim, a reusable MinMax MaxSim
kernel factory supporting 11 query/document bit-width pairs: equal widths from
1 through 8, plus 8-bit queries against 1-, 2-, or 4-bit documents. Backends
include x86-64 V3/V4, NEON, scalar, and a reference implementation. Added
matching benchmark workloads and runtime L1/L2 cache detection for matrix-kernel
tile budgets (#1508, #1509, #1134). - In-memory indexing (experimental): Added multi-insert support and
benchmarks, replaced full-precision slot tags with packed readability bits,
reduced sharing between threads, and removed allocation during
pruning (#1587, #1580, #1542, #1523). - ARM performance: Added NEON squared-L2 kernels for
i8/u8, optimized
AArch64 FP16 inner products with FMLAL, and accelerated the neighbor priority
queue's lower-bound lookup (#1540, #1500, #1512). - PiPNN (experimental, opt-in): Added provider-independent graph construction behind the
diskann/pipnnfeature: overlapping partitioning, leaf neighbor selection, and
RobustPrune finalization. This is the construction core, not the disk-index
integration (#1290). - Benchmarking: Added regression checks and reporting, refactored in-memory
benchmark inputs, and migrated Callgrind benchmarks to Gungraun (#1521, #1510,
#1517).
Breaking changes and upgrading
- Custom data providers (#1541):
DataProvider::to_external_idwas removed.
Remove this method from implementations of the trait. Code that called it
must use its provider's own ID-translation facility instead. - Experimental
diskann-inmemAPIs (#1523, #1528):
provider::ElementRefnow has a lifetime parameter; update explicit type
annotations toElementRef<'_>(or the appropriate named lifetime).
repr::full::ConfigErroris now an opaque error struct rather than an enum;
remove matches onTooManyStartPointsandDimTooLargeand handle or
propagate the error through its error interface. - Internal start-point IDs (#1527, #1528): Start-point handling moved into
representations, and the built-in representations now place start points at
the beginning of their internal ID space. Do not rely on their old position
at the end; start-point positions are not a public layout guarantee. - Benchmark inputs and tooling (#1510, #1517): The experimental
inmem2
input schema was refactored. Update saved inputs using
diskann-benchmark/example/inmem2.json. Callgrind benchmark targets now use
Gungraun rather than iai-callgrind; update scripts invoking the old targets. - Garnet integration (#1515): The separately versioned, non-crates.io
diskann-garnetintegration splits import verification from finalization.
Update FFI callers from the old four-argumentfinish_importreturning a
status byte to optional partitionedverify_import(ctx, index, task_idx, task_count) -> bool, followed byfinish_import(ctx, index) -> bool.
Complete all term writes before verification or finalization.
All Changes
- [CI] Skip some long-running PQ tests under coverage by Mark Hildebrand (@hildebrandmw) in #1514
- [diskann-inmem] Move start point handling out of
Store. by Mark Hildebrand (@hildebrandmw) in #1527 - Bump the github-actions group with 4 updates by Dependabot (@dependabot)[bot] in #1526
- [benchmark] Refactor
diskann-inmembenchmarks by Mark Hildebrand (@hildebrandmw) in #1510 - [CI] Fix Disk Benchmarks failure due to SSD in use by Wei Wu (@wuw92) in #1530
- Remove
DataProvider::to_external_idby Mark Hildebrand (@hildebrandmw) in #1541 - Migrate Callgrind benchmarks from iai-callgrind to Gungraun by Alex Razumov (@arrayka) in #1517
- [diskann] Add aarch64 NeighborPriortyQueue.get_lower_bound by pfoxARM in #1512
- [diskann-inmem] Reduce true and false sharing by Mark Hildebrand (@hildebrandmw) in #1542
- [diskann-garnet] Split finish_import into finish_import and verify_import by Jack Moffitt (@metajack) in #1515
- [benchmark] Add support for regression checks and reporting by Mark Hildebrand (@hildebrandmw) in #1521
- Run Clippy in release mode in CI and fix a release-only unused import by Alex Razumov (@arrayka) in #1516
- [diskann-vector] Neon Squared L2 kernels for int8 and uint8 by pfoxARM in #1540
- Update AGENTS.md and fix baseline links by Wei Wu (@wuw92) in #1537
- Bump diskann-disk to edition 2024 by Wei Wu (@wuw92) in #1538
- [multi-vector] Detect L1/L2 cache sizes for matrix kernels by Wei Wu (@wuw92) in #1134
- [diskann-inmem] Make retirement require a custom type by Mark Hildebrand (@hildebrandmw) in #1544
- [diskann-inmem] Move start points to the beginning by Mark Hildebrand (@hildebrandmw) in #1528
- [diskann-inmem] Remove allocation during prune by Mark Hildebrand (@hildebrandmw) in #1523
- [CI] Add
--config "$RUST_CONFIG"to baseline runs by Alex Razumov (@arrayka) in #1562 - [diskann-vector] Optimise AArch64 FP16 Inner Products using FMLAL by Utsav Goel (@UtsavGoelArm) in #1500
- [CI Nightly] Lock miri toolchain to 1.97.0-nightly by Alex Razumov (@arrayka) in #1545
- Use fuzzy matching for baselines. by Mark Hildebrand (@hildebrandmw) in #1563
- Bump taiki-e/install-action from 2.87.30 to 2.88.0 in the github-actions group across 1 directory by Dependabot (@dependabot)[bot] in #1579
- [multi-vector] Add MinMax MaxSim kernel factory by juchen-ms (@partychen) in #1508
- [diskann-inmem] Use packed
Slotsfor full-precision by Mark Hildebrand (@hildebrandmw) in #1580 - [diskann-inmem] Split up inmem full-precision tests by Mark Hildebrand (@hildebrandmw) in #1584
- [diskann-inmem] Add support and benchmarks for multi-insert by Mark Hildebrand (@hildebrandmw) in #1587
- [multi-vector] Add MinMax MaxSim benchmark by juchen-ms (@partychen) in #1509
- PiPNN 3/6: add core graph construction by weiyaoluo (@SeliMeli) in #1290
New Contributors
- Utsav Goel (@UtsavGoelArm) made their first contribution in #1500
Full Changelog: v0.61.0...v0.62.0