Skip to content

Commit 2576864

Browse files
committed
Release v0.2.3: Zero-overhead C++20 templated Searcher pipeline, VIBE distance-tolerance recall and benchmark improvements
1 parent 4f54494 commit 2576864

12 files changed

Lines changed: 1223 additions & 69 deletions

File tree

‎RELEASE_NOTES.md‎

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,36 @@
11
# Release Notes
22

3-
## deglib v0.2.2
3+
## deglib v0.2.3
4+
5+
### Overview
6+
deglib v0.2.3 introduces a zero-overhead C++20 templated **`Searcher`** pipeline for inference (`deglib::search::Searcher` / `deglib.search.create_searcher`), eliminating Python bridge and memory allocation overhead in single-query loops by bundling query quantization, graph search, and exact SIMD candidate reranking into a single native invocation. Additionally, it brings official VIBE distance-tolerance recall calculation and clean C++20 `std::span` convenience interfaces.
47

8+
---
9+
10+
### 🚀 Key Features & Improvements
11+
12+
#### High-Performance Inference Pipeline (`deglib::search::Searcher`)
13+
* **Zero-Overhead End-to-End Querying:** Integrates query quantization (FP32/FP16 $\rightarrow$ INT8/UINT8/EVP), graph traversal on quantized indices, and SIMD candidate refinement against FP16/FP32 base features in a single C++ call.
14+
* **Static Template Specialization (`SearcherImpl<QuantT, RefinerT>`):**
15+
* Compile-time `if constexpr` branch elimination avoiding virtual method dispatch in the hot search loop.
16+
* Full support for all quantizers (`NoQuantizer`, `ScalarInt8Quantizer`, `ScalarInt8PerDimQuantizer`, `ScalarUint8Quantizer`, `ScalarUint8PerDimQuantizer`, `EVPQuantizer`).
17+
* Support for unquantized and quantized candidate refiners (`NoRefiner`, `ExactRefiner<uint16_t>`, `ExactRefiner<float>`).
18+
* **Modern C++20 Interface:**
19+
* `std::span<const T>` and `SearchResult` helpers for safe, expressive, and allocation-free querying.
20+
* Direct result count reporting (`uint32_t count`) indicating valid found neighbors.
21+
* Fast `unsorted=true` mode skipping heap sorting for pure candidate set retrieval.
22+
* Optional `return_distances=true` flag for returning both neighbor IDs and exact distance values.
23+
* **Python Factory & Bindings (`deglib.search.create_searcher`):**
24+
* Automatic type deduction from graph and quantizer instances without manual `query_dtype` flags.
25+
26+
#### VIBE Benchmark Enhancements (`examples/vibe`)
27+
* **Official VIBE Distance-Tolerance Recall:** Implemented official ground-truth distance threshold evaluation ($t = \text{gt\_distances}[k-1] + 10^{-3}$) using exact metric math (`euclidean`, `cosine`, `normalized`, `ip`) identical to `vibe/distance.py`.
28+
* **Single-Query Evaluation Loop:** Benchmark runner uses `adapter.query(v, n)` powered by the C++ `Searcher` with `unsorted=True` for peak single-threaded QPS without Python bridge latency.
29+
* **Garbage Collection & Cooldown:** Memory cleanup and settling pause after graph fitting.
30+
31+
---
32+
33+
## deglib v0.2.2
534
### Overview
635
deglib v0.2.2 introduces a strictly object-oriented **Fit-then-Quantize** scalar quantization suite (`ScalarQuantizerInt8`, `ScalarQuantizerInt8PerDim`, `ScalarQuantizerUint8`, `ScalarQuantizerUint8PerDim`), `make_scalar_quantizer_*` factory functions, full native FP16 (`uint16_t` / `np.float16`) and FP32 quantization support across all classes, and removes legacy one-shot procedural helpers.
736

‎cpp/deglib/include/deglib/deglib.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "deglib/graph.h"
99
#include "deglib/optimization.h"
1010
#include "deglib/search.h"
11+
#include "deglib/search/searcher.h"
1112
#include "deglib/utils/memory.h"
1213
#include "deglib/utils/random.h"
1314

0 commit comments

Comments
 (0)