Skip to content

DiskANN v0.62.0

Latest

Choose a tag to compare

@hildebrandmw hildebrandmw released this 12 Nov 15:39
f43ca25

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/pipnn feature: 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_id was 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-inmem APIs (#1523, #1528):
    provider::ElementRef now has a lifetime parameter; update explicit type
    annotations to ElementRef<'_> (or the appropriate named lifetime).
    repr::full::ConfigError is now an opaque error struct rather than an enum;
    remove matches on TooManyStartPoints and DimTooLarge and 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-garnet integration splits import verification from finalization.
    Update FFI callers from the old four-argument finish_import returning a
    status byte to optional partitioned verify_import(ctx, index, task_idx, task_count) -> bool, followed by finish_import(ctx, index) -> bool.
    Complete all term writes before verification or finalization.

All Changes

New Contributors

Full Changelog: v0.61.0...v0.62.0