[C API] Register BFLOAT16 element type in the `StorageSimple` dispatcher
维护者通常 5 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start with the dispatcher rows in bindings/c/src/data_builder/simple.hpp, the type mapping in bindings/c/src/types_support.hpp, and the constructor handling in bindings/c/src/storage.hpp. Read the corresponding FLOAT16 tests in bindings/c/tests/ before implementing the BF16 round-trip and index-flow coverage. Done means BF16 storage creation, indexing, searching, saving, loading, and memory reporting work consistently with the stated tolerances.
由索引模型根据 Issue 内容生成。
描述
Summary
SVS_DATA_TYPE_BFLOAT16 is declared in the C API enum
(bindings/c/include/svs/c/svs_c.h), but at pin
5717f6855a73a9ab7524748e2a10a57ed865737d no StorageSimple
specialization is registered for it in the dispatch table at
bindings/c/src/data_builder/simple.hpp:93-104, and
bindings/c/src/storage.hpp:51-55 throws when constructed with
SVS_DATA_TYPE_BFLOAT16. As a result, svs_storage_create_simple(SVS_DATA_TYPE_BFLOAT16, err)
fails, and callers cannot use BF16 vectors as the SVS storage kind.
This ask adds the BFloat16 specialization to the dispatcher so the
type is fully reachable end-to-end.
Motivation
valkey-search supports TYPE FLOAT32, TYPE FLOAT16, and
TYPE BFLOAT16 for its ALGORITHM HNSW index (see valkey-search
PR #1001). Users who already ingest BFloat16 embeddings (common in
recent LLM inference stacks) can pick ALGORITHM HNSW today. For
ALGORITHM SVS_VAMANA, valkey-search rejects TYPE BFLOAT16 at
parse because the SVS C API path cannot store the vectors -- FLOAT32
and FLOAT16 are supported end-to-end but BFLOAT16 is not.
The C++ core supports BFloat16 (svs::BFloat16 exists in
include/svs/lib/bfloat16.h and is used by other paths e.g.
orchestrators/dynamic_ivf.h), so the missing piece is purely a
dispatcher registration in the C API's simple-storage builder.
Proposed change
Add one specialization row to bindings/c/src/data_builder/simple.hpp:
// bindings/c/src/data_builder/simple.hpp:93-104 (approximate)
XX(float, float_alloc)
XX(svs::Float16, float16_alloc)
XX(svs::BFloat16, bfloat16_alloc) // <-- new
Plus the corresponding entry in bindings/c/src/types_support.hpp
so to_data_type(svs_data_type_t) maps
SVS_DATA_TYPE_BFLOAT16 to DataType::bfloat16 (currently returns
DataType::undef).
Plus lift the StorageSimple ctor throw at storage.hpp:51-55 for
BFLOAT16.
Acceptance criteria
svs_storage_create_simple(SVS_DATA_TYPE_BFLOAT16, err)returns
a valid storage handle.- A
svs_index_builder_twith a BFloat16 storage builds an index
viasvs_index_build_dynamic.svs_index_dynamic_add_points
acceptsconst float*inputs and internally converts to BFloat16
for storage (mirroring the FLOAT16 path). svs_index_search_topkon a BFloat16 index returns top-k
results matching the C++ core's BFloat16 behavior.svs_storage_get_kindon the storage returns a value consistent
with the BFloat16 kind.svs_index_get_memory_usagereports
BFloat16-sized data bytes (2 bytes per element).- Unit tests in
bindings/c/tests/:- Round-trip: build with BF16 storage, add N vectors, search,
save, load, search again -- results within numerical
tolerance appropriate to BFloat16 quantization. - Cross-check against the FLOAT16 test at the same N and k --
confirm the two paths follow the same acceptance shape.
- Round-trip: build with BF16 storage, add N vectors, search,
Non-goals
- Adding BFloat16 as a
StorageSQorStorageLVQelement type.
Simple-storage (uncompressed) is sufficient; SQ/LVQ inputs are
independent design decisions. - Distance kernel optimization. Scalar fallback is acceptable for
the initial registration; an AVX / AVX-512-BF16 kernel is a
separate optimization.
- 主要语言
- C++
- 星标
- 241
- 派生
- 48
- 平均合并
- 4 天 21 小时
- 30 天内合并 PR
- 11
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
intel/ScalableVectorSearch 的其他 Issue
-
难度 1/5 1 小时以内 新手友好度 88/100
intel/ScalableVectorSearch#356 ·
维护者通常 5 天内回复
-
难度 4/5 3-5 天 新手友好度 42/100
intel/ScalableVectorSearch#469 ·
维护者通常 5 天内回复
-
enhancement
难度 3/5 1-2 天 新手友好度 32/100
intel/ScalableVectorSearch#460 ·
维护者通常 5 天内回复
-
难度 4/5 3-5 天 新手友好度 55/100
intel/ScalableVectorSearch#438 ·
维护者通常 5 天内回复
-
CI: tier the test matrix into PR / main / nightly to cut Actions minutes可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 5/5 一周以上 新手友好度 32/100
intel/ScalableVectorSearch#432 · 1 条评论 ·
维护者通常 5 天内回复
查看 intel/ScalableVectorSearch 的全部 Issue
相似的 Issue
-
runtime: lf_f128_mod is documented as fmodq (truncating) but implements floor-based modulo; unused未关闭internal correctness low priority rt_lib
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 87/100
-
PriorityNotificationQueue::wakeUpAll() loses the wake-up for a thread that is not waiting yet可能已有人在做 @matejk 今天认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 78/100
pocoproject/poco#5674 ·
维护者通常 2 天内回复
-
bug docs GUI
难度 2/5 1-3 小时 新手友好度 62/100
sonic-pi-net/sonic-pi#3609 ·
-
bug
难度 2/5 1-3 小时 新手友好度 70/100
SanderMertens/flecs#2395 ·
维护者通常 1 天内回复