Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
353 commits
Select commit Hold shift + click to select a range
d242dbc
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
e8f07cf
Refresh API reference signatures after formatting public declarations
ZhaoHaoRu Nov 2, 2026
b7b3e59
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
6705b63
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
1ed13a9
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
c107679
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
52b9968
Format FlowANN review corrections with repository tools
ZhaoHaoRu Nov 2, 2026
e556cc3
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
c47d7b3
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
ad322de
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
f0e51a4
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
6568741
Limit CMake changes to the GDRCopy runtime path and FlowANN source in…
ZhaoHaoRu Nov 2, 2026
3de712e
Limit CMake changes to the GDRCopy runtime path and FlowANN source in…
ZhaoHaoRu Nov 2, 2026
01cbd5e
Limit CMake changes to the GDRCopy runtime path and FlowANN source in…
ZhaoHaoRu Nov 2, 2026
c08fd43
Limit CMake changes to the GDRCopy runtime path and FlowANN source in…
ZhaoHaoRu Nov 2, 2026
38194a7
Limit CMake changes to the GDRCopy runtime path and FlowANN source in…
ZhaoHaoRu Nov 2, 2026
eae77b4
Limit CMake changes to the GDRCopy runtime path and FlowANN source in…
ZhaoHaoRu Nov 2, 2026
28d5045
Limit CMake changes to the GDRCopy runtime path and FlowANN source in…
ZhaoHaoRu Nov 2, 2026
fa8a038
Limit CMake changes to the GDRCopy runtime path and FlowANN source in…
ZhaoHaoRu Nov 2, 2026
a5f4081
Limit CMake changes to the GDRCopy runtime path and FlowANN source in…
ZhaoHaoRu Nov 2, 2026
dddcd76
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
35cece2
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
03a6751
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
f6d1446
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
8c68fbb
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
79fe023
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
c24f8b9
Merge FlowANN step 3 review fixes into step 4
ZhaoHaoRu Nov 2, 2026
69ee46a
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
272d2b9
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
126b11d
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
3b69166
Explain the GDRCopy default and configure-time dependency
ZhaoHaoRu Nov 2, 2026
c76c845
Document compressed C build parameters, ownership, and errors
ZhaoHaoRu Nov 2, 2026
c4e1f82
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
b5bb8f2
Keep C API documentation changes focused on the new tiered declarations
ZhaoHaoRu Nov 2, 2026
f8d306f
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
fa305a2
Locate private benchmark headers for both fetched and imported cuVS t…
ZhaoHaoRu Nov 2, 2026
0b83632
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
56f4ebb
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
b0c7636
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
3fd18e8
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
8e6ec90
Keep the initial iterative graph large enough for distinct neighbors
ZhaoHaoRu Nov 2, 2026
c4070c3
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
8e0bb05
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
2afcd47
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
8f07606
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
01d63dc
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
b1388e7
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
9f7426b
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
57a19b4
Clamp iterative degrees for ordinary and tiered construction callers
ZhaoHaoRu Nov 2, 2026
eea2950
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
f90e2d2
Use a view for already aligned regression datasets and own only padde…
ZhaoHaoRu Nov 2, 2026
eca48c4
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
1f4018a
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
9d4d159
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
adbc73f
Merge NVIDIA cuVS main into FlowANN step 1
ZhaoHaoRu Nov 2, 2026
231345e
Merge FlowANN step 1 review fixes into step 2
ZhaoHaoRu Nov 2, 2026
13eb469
Merge FlowANN step 2 review fixes into step 3
ZhaoHaoRu Nov 2, 2026
65096d6
Merge FlowANN step 3 review fixes into step 4
ZhaoHaoRu Nov 2, 2026
6f8412c
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
c23e038
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
b2b4ca5
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
c0c1cbc
Merge FlowANN step 7 and latest NVIDIA main into step 8
ZhaoHaoRu Nov 2, 2026
3804986
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
e0d3eeb
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
4dcb0b2
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
73285d9
Adapt FlowANN step 2 to upstream dataset data and manifest views
ZhaoHaoRu Nov 2, 2026
c75dcca
Merge FlowANN step 3 review fixes into step 4
ZhaoHaoRu Nov 2, 2026
6b31d32
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
14265f7
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
f33bc19
Merge FlowANN step 2 review fixes into step 3
ZhaoHaoRu Nov 2, 2026
95d358a
Adapt FlowANN step 4 to upstream dataset data and manifest views
ZhaoHaoRu Nov 2, 2026
dcae1ac
Adapt FlowANN step 5 to upstream dataset data and manifest views
ZhaoHaoRu Nov 2, 2026
11522d8
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
5999959
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
5ba13e5
Adapt FlowANN step 8 to upstream dataset data and manifest views
ZhaoHaoRu Nov 2, 2026
2381710
Adapt FlowANN step 7 to upstream dataset data and manifest views
ZhaoHaoRu Nov 2, 2026
88eed5c
Adapt FlowANN step 6 to upstream dataset data and manifest views
ZhaoHaoRu Nov 2, 2026
f30341a
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
fcf0065
Use current dataset owner views in padded-query regression
ZhaoHaoRu Nov 2, 2026
3d7af78
Validate VPQ owner through data and codebook views
ZhaoHaoRu Nov 2, 2026
fb88a85
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
e88dee2
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
b60dba7
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
fc6f0bc
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
2ba50ea
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
6716a52
Format upstream dataset API adaptations
ZhaoHaoRu Nov 2, 2026
4d180e8
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
cde799e
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
892e363
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
56eab60
Format upstream dataset API adaptations
ZhaoHaoRu Nov 2, 2026
5423d1d
Format upstream dataset API adaptations
ZhaoHaoRu Nov 2, 2026
88f7faa
Preserve serialized scalar widths and cover padded dense dataset roun…
ZhaoHaoRu Nov 2, 2026
98dd0ca
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
0356bcd
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
502d588
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
688642f
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
fdcd472
Adapt dense graph helper views and supply dataset template type expli…
ZhaoHaoRu Nov 2, 2026
40eedfc
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
6658cf7
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
cb2f5a2
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
f750606
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
5e7f7c9
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
10cf813
Adapt persistence assertions to dataset data and manifest metadata
ZhaoHaoRu Nov 2, 2026
306ab78
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
b584e73
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
4c9e97c
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
b5d618f
Use upstream row-major bridge for non-iterative graph builders
ZhaoHaoRu Nov 2, 2026
93d17c8
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
dddb7ec
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
dc93185
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
110afb7
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
571d4d6
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
59c8127
Construct empty padded views with the upstream dataset factory
ZhaoHaoRu Nov 2, 2026
c43edc8
Merge FlowANN step 2 review fixes into step 3
ZhaoHaoRu Nov 2, 2026
c1dc34e
Merge FlowANN step 3 review fixes into step 4
ZhaoHaoRu Nov 2, 2026
5ae81af
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
e9c7dde
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
c00129e
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
be1d22c
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
4f86461
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
478456c
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
0b7adbd
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
d06aaa4
Use the upstream row-major view for cosine norm reduction
ZhaoHaoRu Nov 2, 2026
e204115
Merge FlowANN step 2 review fixes into step 3
ZhaoHaoRu Nov 2, 2026
048d283
Merge FlowANN step 3 review fixes into step 4
ZhaoHaoRu Nov 2, 2026
6392c66
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
0fe3860
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
f533db5
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
74343cf
Read canonical padded rows directly and initialize padding when conve…
ZhaoHaoRu Nov 2, 2026
d2f9c7b
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
f59b163
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
3d86ef3
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
252cffe
Cover conversion of older dense row pitches and cosine norms
ZhaoHaoRu Nov 2, 2026
842c69f
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
e56b3fd
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
d97d88e
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
1353ed7
Preserve output-width invalid IDs for mapped providers and remove a r…
ZhaoHaoRu Nov 2, 2026
6ac3fc5
Merge FlowANN step 1 review fixes into step 2
ZhaoHaoRu Nov 2, 2026
95d1dd5
Cover abort draining, concurrent lease failures and recovery after in…
ZhaoHaoRu Nov 2, 2026
0f7db48
Merge FlowANN step 2 review fixes into step 3
ZhaoHaoRu Nov 2, 2026
ca636a2
Latch queue aborts and report each lease failure while allowing inval…
ZhaoHaoRu Nov 2, 2026
16a0e93
Define relocatable GDRCopy runtime deployment paths for shared and st…
ZhaoHaoRu Nov 2, 2026
21f252e
Merge FlowANN step 3 review fixes into step 4
ZhaoHaoRu Nov 2, 2026
25f103f
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
edd1f96
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
3f228f1
Retain padded single-CTA query batching and check every published par…
ZhaoHaoRu Nov 2, 2026
cd6098e
Support padded multi-CTA query batches from the first multi-CTA stage
ZhaoHaoRu Nov 2, 2026
7ef82c3
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
d59289e
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
9ad9d0e
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
8552e4d
Cover truncated dense files without allowing large device allocations
ZhaoHaoRu Nov 2, 2026
5ebcf80
Use the current RMM resource API in the allocation-limit regression
ZhaoHaoRu Nov 2, 2026
d990a6c
Scope the test allocation limit with an owning RMM resource
ZhaoHaoRu Nov 2, 2026
ce83005
Reject truncated serialized payloads before allocation and complete C…
ZhaoHaoRu Nov 2, 2026
f520919
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
40a78c9
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
5fb8311
Restore C API examples, render struct-typed fields and enable the tie…
ZhaoHaoRu Nov 2, 2026
e60e5dd
Cover 64-bit invalid results for filtered tiered searches
ZhaoHaoRu Nov 2, 2026
551a161
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
ed0acc0
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
8fcef88
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
4ae9082
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
d9e2f3c
Keep overloaded build copydoc targets intact during formatting and ge…
ZhaoHaoRu Nov 2, 2026
1dd08b3
Format query-batching and output-width regression coverage
ZhaoHaoRu Nov 2, 2026
cca81a5
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
e03dd4e
Format query-batching and output-width regression coverage
ZhaoHaoRu Nov 2, 2026
f8f6b79
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
4d1fcf4
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
d4f0552
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
5907fe5
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
1fa151b
Keep one compatibility statement alongside the migration guidance
ZhaoHaoRu Nov 2, 2026
252957e
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
9a0776f
Format serialization validation and regenerate the C++ reference
ZhaoHaoRu Nov 2, 2026
da04439
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
9267594
Cover documented, plain and pointer struct fields in native API gener…
ZhaoHaoRu Nov 2, 2026
646226d
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
2c5796b
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
313ad9e
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
2957ff3
Initialize required subgraph metadata in the invalid-result regression
ZhaoHaoRu Nov 2, 2026
06061a1
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
b42d661
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
c208367
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
8103b8e
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
f311ca4
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
00eaf8b
Format native documentation generator regression coverage
ZhaoHaoRu Nov 2, 2026
5120d7a
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
12844a5
Format poller failure reporting with the repository C++ style
ZhaoHaoRu Nov 2, 2026
42645de
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
fe15499
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
1d8b967
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
53320fb
Merge FlowANN step 2 review fixes into step 3
ZhaoHaoRu Nov 2, 2026
f1eb7be
Merge FlowANN step 3 review fixes into step 4
ZhaoHaoRu Nov 2, 2026
52ccfc3
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
a02f218
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
42b1277
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
f583143
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
9f6259b
Document BBQ build overloads explicitly so Fern retains their signatu…
ZhaoHaoRu Nov 2, 2026
47443d8
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
28bf398
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
30103c9
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
725aa90
Honor external GDRCopy runtime paths in standalone static C builds
ZhaoHaoRu Nov 2, 2026
b8af510
Merge FlowANN step 3 review fixes into step 4
ZhaoHaoRu Nov 2, 2026
ef76f45
Bound FlowANN batches and size seed hashmaps; unify invalid output IDs
ZhaoHaoRu Nov 2, 2026
a016c16
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
d5c99d6
Bound multi-CTA batches and strengthen padded-query correctness checks
ZhaoHaoRu Nov 2, 2026
69f10b9
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
9281caf
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
4f2e600
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
083ff39
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
21cf7b5
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
73311e1
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
e520803
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
47bf022
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
4523720
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
d0172b5
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
e070a79
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
cb5a2a0
Preserve global seed hash history and correct padded fixture distances
ZhaoHaoRu Nov 2, 2026
d43e229
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
928ebcd
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
2836bf8
Use exact expected distances for the multi-CTA padded fixture
ZhaoHaoRu Nov 2, 2026
ccd08fb
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
5db386a
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
0faa7ba
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
d259537
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
7e10773
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
2c20f84
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
b780bed
Cover seed hash growth, AUTO fallback, and explicit shared capacity r…
ZhaoHaoRu Nov 2, 2026
5883bcb
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
aebf117
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
97191d9
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
f232d5f
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
b88bf79
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
45efe67
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
5e0c4db
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
4fad216
Limit seed regression result copies to the sampled query count
ZhaoHaoRu Nov 2, 2026
40f06dd
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
adf1c2e
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
2592a8d
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
da957c9
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
8d0c696
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
c2836b5
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
6ba9d5c
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
db4bfc2
Match the seed regression graph metadata to its sixteen cross edges
ZhaoHaoRu Nov 2, 2026
a1f299e
Merge FlowANN step 4 review fixes into step 5
ZhaoHaoRu Nov 2, 2026
b46de8d
Merge FlowANN step 5 review fixes into step 6
ZhaoHaoRu Nov 2, 2026
3d3b738
Merge FlowANN step 6 review fixes into step 7
ZhaoHaoRu Nov 2, 2026
8846d89
Merge FlowANN step 7 review fixes into step 8
ZhaoHaoRu Nov 2, 2026
cab4efe
Merge FlowANN step 8 review fixes into step 9
ZhaoHaoRu Nov 2, 2026
662697c
Merge FlowANN step 9 review fixes into step 10
ZhaoHaoRu Nov 2, 2026
3d14c5d
Merge FlowANN step 10 review fixes into step 11
ZhaoHaoRu Nov 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions c/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ option(BUILD_CAGRA_HNSWLIB "Build CAGRA+hnswlib interface" ON)
option(BUILD_MG_ALGOS "Build with multi-GPU support" ON)

option(CUVSC_STATIC_CUVS_LIBRARY "Link against statical version of libcuvs" OFF)
set(CUVS_FLOWANN_GDRCOPY_INSTALL_RPATH "$ORIGIN" CACHE STRING
"Install RPATH for external GDRCopy runtime libraries")

# Check if cuVS is already available. If so, it is the user's responsibility to ensure that the
# CMake package is also available at build time of the Python cuvs package.
Expand Down Expand Up @@ -123,6 +125,13 @@ set_target_properties(
VISIBILITY_INLINES_HIDDEN ON
)

if(CUVSC_STATIC_CUVS_LIBRARY)
# Imported cuvs_static can carry GDRCopy without exporting its build-time feature flags.
# Keep the runtime deployment setting available to standalone C builds too.
set_property(TARGET cuvs_c APPEND PROPERTY INSTALL_RPATH
"${CUVS_FLOWANN_GDRCOPY_INSTALL_RPATH}")
endif()

# Setup the VERSION and SOVERSION of our library
#
# Long term goal is that every release that breaks the C ABI will update `cuvs_abi_version` allowing
Expand Down
276 changes: 201 additions & 75 deletions c/include/cuvs/neighbors/cagra.h

Large diffs are not rendered by default.

174 changes: 170 additions & 4 deletions c/src/neighbors/cagra.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1113,14 +1113,18 @@ void _serialize(cuvsResources_t res, const char *filename,
: "cuvsCagraSerializeGraph: null index handle";
with_index_by_layout<T, uint32_t,
true>(box, null_handle_err, "", [&](auto &idx) {
bool const tiered = idx.graph_storage() ==
cuvs::neighbors::cagra::graph_storage_kind::tiered;
RAFT_EXPECTS(!tiered || include_dataset,
"Tiered serialization requires its dataset");
using index_dataset_view_t = std::remove_cvref_t<decltype(idx.dataset())>;
if constexpr (cuvs::neighbors::is_bbq_dataset_view_v<index_dataset_view_t>) {
RAFT_EXPECTS(!include_dataset,
"cuvsCagraSerializeGraphAndDataset is not supported for BBQ indices");
cuvs::neighbors::cagra::serialize(*res_ptr, std::string(filename), idx);
} else if constexpr (cuvs::neighbors::is_vpq_dataset_view_v<index_dataset_view_t>) {
RAFT_EXPECTS(
!include_dataset,
!include_dataset || tiered,
"cuvsCagraSerializeGraphAndDataset is not supported for PQ indices; serialize the PQ "
"dataset separately");
cuvs::neighbors::cagra::serialize(*res_ptr, std::string(filename), idx);
Expand All @@ -1139,6 +1143,7 @@ void _serialize(cuvsResources_t res, const char *filename,
struct serialized_cagra_header {
DLDataType dtype;
cuvs::neighbors::cagra::serialized_dataset_kind dataset_kind;
bool tiered_pq = false;
};

static auto read_serialized_header(cuvsResources_t res, const char *filename)
Expand All @@ -1154,6 +1159,14 @@ static auto read_serialized_header(cuvsResources_t res, const char *filename)
RAFT_FAIL("Invalid or truncated index header in file %s", filename);
}

bool const tiered = std::memcmp(dtype_string, "CTIR", 4) == 0;
if (tiered) {
auto version = raft::deserialize_scalar<uint32_t>(*res_ptr, is);
RAFT_EXPECTS(version == 1, "Unsupported CAGRA tiered envelope version");
RAFT_EXPECTS(is.read(dtype_string, 4),
"Truncated CAGRA tiered dtype header");
}

auto const dtype = raft::numpy_serializer::parse_descr(
std::string(dtype_string, sizeof(dtype_string)));
DLDataType output_dtype{
Expand All @@ -1173,6 +1186,14 @@ static auto read_serialized_header(cuvsResources_t res, const char *filename)
auto const version = raft::deserialize_scalar<int>(*res_ptr, is);
auto const dataset_kind_raw =
raft::deserialize_scalar<std::uint32_t>(*res_ptr, is);
if (tiered) {
RAFT_EXPECTS(version == 2 &&
(dataset_kind_raw == 1 || dataset_kind_raw == 2),
"Unsupported tiered serialization header");
return {output_dtype,
cuvs::neighbors::cagra::serialized_dataset_kind::device_padded,
dataset_kind_raw == 2};
}
RAFT_EXPECTS(
version == cuvs::neighbors::cagra::cagra_serialization_version,
"serialization version mismatch, expected %d, got %d",
Expand Down Expand Up @@ -1246,12 +1267,14 @@ void _deserialize(cuvsResources_t res, const char *filename,

if (include_dataset) {
RAFT_EXPECTS(
dataset_owner != nullptr,
dataset_owner != nullptr ||
holder->idx.graph_storage() ==
cuvs::neighbors::cagra::graph_storage_kind::tiered,
"cuvsCagraDeserializeGraphAndDataset: serialized index has no dataset");
}

std::unique_ptr<cuvsDataset> dataset_handle{};
if (include_dataset) {
if (include_dataset && dataset_owner) {
dataset_handle = std::make_unique<cuvsDataset>();
dataset_handle->addr = reinterpret_cast<uintptr_t>(dataset_owner.get());
dataset_handle->destroy_addr = &destroy_typed_addr<owner_dataset_t>;
Expand All @@ -1273,13 +1296,31 @@ void _deserialize(cuvsResources_t res, const char *filename,
output_index->dtype = dtype;
holder.release();

if (include_dataset) {
if (include_dataset && dataset_owner) {
dataset_handle->addr = reinterpret_cast<uintptr_t>(dataset_owner.release());
*out_dataset = dataset_handle.release();
}
destroy_sg_cagra_c_api_box(old_addr);
}

template <typename T>
void deserialize_tiered_pq(cuvsResources_t res, char const *filename,
cuvsCagraIndex_t output, DLDataType dtype) {
using view_t = cuvs::neighbors::device_vpq_dataset_view<half, int64_t>;
using holder_t = cuvs_cagra_c_api_index_lifetime_holder<T, view_t>;
auto &resources = *reinterpret_cast<raft::resources *>(res);
auto holder = std::make_unique<holder_t>(
cuvs::neighbors::cagra::device_pq_index<T>(resources));
cuvs::neighbors::cagra::deserialize(resources, std::string(filename),
&holder->idx);
auto box = make_sg_cagra_c_api_index_box<T, view_t>(holder.get());
auto old_addr = output->addr;
output->addr = reinterpret_cast<uintptr_t>(box.release());
output->dtype = dtype;
holder.release();
destroy_sg_cagra_c_api_box(old_addr);
}

template <typename T>
void _serialize_to_hnswlib(cuvsResources_t res, const char *filename,
cuvsCagraIndex_t index) {
Expand Down Expand Up @@ -1473,6 +1514,29 @@ void convert_c_index_params(cuvsCagraIndexParams params,
out->metric = static_cast<cuvs::distance::DistanceType>((int)params.metric);
out->intermediate_graph_degree = params.intermediate_graph_degree;
out->graph_degree = params.graph_degree;
RAFT_EXPECTS(params.graph_storage == CUVS_CAGRA_GRAPH_DEVICE ||
params.graph_storage == CUVS_CAGRA_GRAPH_TIERED,
"Invalid CAGRA graph storage mode");
out->graph_storage = static_cast<graph_storage_kind>(params.graph_storage);
out->tiered.reset();
if (out->graph_storage == graph_storage_kind::tiered) {
out->tiered.emplace();
out->tiered->device_graph_budget_bytes =
params.tiered.device_graph_budget_bytes;
out->tiered->node_per_cacheline = params.tiered.node_per_cacheline;
out->tiered->grouping_enabled = params.tiered.grouping_enabled;
out->tiered->n_groups = params.tiered.n_groups;
out->tiered->n_bits = params.tiered.n_bits;
out->tiered->balance_tolerance = params.tiered.balance_tolerance;
out->tiered->training_rows = params.tiered.training_rows;
out->tiered->assignment_batch_rows = params.tiered.assignment_batch_rows;
out->tiered->kmeans_n_iters = params.tiered.kmeans_n_iters;
out->tiered->validate = params.tiered.validate;
out->tiered->num_seeds = params.tiered.num_seeds;
out->tiered->seed_training_rows = params.tiered.seed_training_rows;
out->tiered->seed = params.tiered.seed;
}

_set_graph_build_params(out->graph_build_params, params, params.build_algo, n_rows, dim);

}
Expand All @@ -1495,6 +1559,17 @@ void convert_c_search_params(cuvsCagraSearchParams params,
out->persistent = params.persistent;
out->persistent_lifetime = params.persistent_lifetime;
out->persistent_device_usage = params.persistent_device_usage;
out->tiered.reset();
if (params.use_tiered_params) {
out->tiered.emplace();
out->tiered->num_seeds = params.tiered.num_seeds;
out->tiered->sync_window_scale = params.tiered.sync_window_scale;
out->tiered->sync_drop_threshold = params.tiered.sync_drop_threshold;
out->tiered->num_queues = params.tiered.num_queues;
out->tiered->empty_pause = params.tiered.empty_pause;
out->tiered->collect_statistics = params.tiered.collect_statistics;
out->tiered->keep_pollers_running = params.tiered.keep_pollers_running;
}
}

void* cagra_c_api_index_ptr(cuvsCagraIndex const* idx)
Expand Down Expand Up @@ -1550,6 +1625,22 @@ extern "C" cuvsError_t cuvsCagraIndexGetSize(cuvsCagraIndex_t index, int64_t* si
});
}

extern "C" cuvsError_t
cuvsCagraIndexGetGraphStorage(cuvsCagraIndex_t index,
cuvsCagraGraphStorage *storage) {
return cuvs::core::translate_exceptions([=] {
RAFT_EXPECTS(index && index->addr && storage,
"cuvsCagraIndexGetGraphStorage: null argument");
auto *box = reinterpret_cast<sg_cagra_c_api_index_box *>(index->addr);
dispatch_serialized_dtype(index->dtype, [&]<typename T>() {
with_index_by_layout<T, uint32_t, true>(
box, "null index", "", [&](auto const &idx) {
*storage = static_cast<cuvsCagraGraphStorage>(idx.graph_storage());
});
});
});
}

extern "C" cuvsError_t cuvsCagraIndexGetGraphDegree(cuvsCagraIndex_t index, int64_t* graph_degree)
{
return cuvs::core::translate_exceptions([=] {
Expand Down Expand Up @@ -2006,6 +2097,48 @@ extern "C" cuvsError_t cuvsCagraBuild(cuvsResources_t res,
});
}

extern "C" cuvsError_t cuvsCagraBuildCompressed(cuvsResources_t res,
cuvsCagraIndexParams_t params,
cuvsPqParams_t compression,
cuvsDataset_t dataset,
cuvsCagraIndex_t index) {
return cuvs::core::translate_exceptions([=] {
RAFT_EXPECTS(res && params && compression && dataset && dataset->addr &&
index,
"cuvsCagraBuildCompressed: null argument");
RAFT_EXPECTS(dataset->mem_type == CUVS_DATASET_MEM_TYPE_HOST &&
dataset->layout == CUVS_DATASET_LAYOUT_STANDARD,
"Compressed tiered build requires host standard vectors");
#ifdef CUVS_ENABLE_FLOWANN_BUILD
auto *resources = reinterpret_cast<raft::resources *>(res);
dispatch_serialized_dtype(dataset->dtype, [&]<typename T>() {
using view_t = cuvs::neighbors::host_standard_dataset_view<T, int64_t>;
using owner_t = cuvs::neighbors::host_standard_dataset<T, int64_t>;
using output_view_t =
cuvs::neighbors::device_vpq_dataset_view<half, int64_t>;
with_dataset_view<owner_t, view_t>(dataset, [&](auto const &view) {
cuvs::neighbors::cagra::index_params cpp_params;
convert_c_index_params(*params, view.n_rows(), view.dim(), &cpp_params);
auto result = cuvs::neighbors::cagra::build(
*resources, cpp_params, make_cpp_vpq_params(*compression), view);
using holder_t =
cuvs_cagra_c_api_index_lifetime_holder<T, output_view_t>;
auto holder = std::make_unique<holder_t>(std::move(result));
auto box =
make_sg_cagra_c_api_index_box<T, output_view_t>(holder.get());
auto old_addr = index->addr;
index->addr = reinterpret_cast<uintptr_t>(box.release());
index->dtype = dataset->dtype;
holder.release();
destroy_sg_cagra_c_api_box(old_addr);
});
});
#else
RAFT_FAIL("Tiered building is disabled in this cuVS library");
#endif
});
}

extern "C" cuvsError_t cuvsCagraIndexFromArgs(cuvsResources_t res,
cuvsDistanceType metric,
DLManagedTensor* graph_tensor,
Expand Down Expand Up @@ -2250,6 +2383,22 @@ extern "C" cuvsError_t cuvsCagraIndexParamsCreate(cuvsCagraIndexParams_t* params
.build_algo = IVF_PQ,
.nn_descent_niter = 20};
(*params)->graph_build_params = new cuvsIvfPqParams{nullptr, nullptr, 1};
auto const defaults = cuvs::neighbors::cagra::tiered_graph_params{};
(*params)->tiered.device_graph_budget_bytes =
defaults.device_graph_budget_bytes;
(*params)->tiered.node_per_cacheline = defaults.node_per_cacheline;
(*params)->tiered.grouping_enabled = defaults.grouping_enabled;
(*params)->tiered.n_groups = defaults.n_groups;
(*params)->tiered.n_bits = defaults.n_bits;
(*params)->tiered.balance_tolerance = defaults.balance_tolerance;
(*params)->tiered.training_rows = defaults.training_rows;
(*params)->tiered.assignment_batch_rows = defaults.assignment_batch_rows;
(*params)->tiered.kmeans_n_iters = defaults.kmeans_n_iters;
(*params)->tiered.validate = defaults.validate;
(*params)->tiered.num_seeds = defaults.num_seeds;
(*params)->tiered.seed_training_rows = defaults.seed_training_rows;
(*params)->tiered.seed = defaults.seed;

});
}

Expand Down Expand Up @@ -2415,6 +2564,15 @@ extern "C" cuvsError_t cuvsCagraSearchParamsCreate(cuvsCagraSearchParams_t* para
.persistent_lifetime = 2,
.persistent_device_usage = 1.0,
};
auto const defaults = cuvs::neighbors::cagra::tiered_search_params{};
(*params)->tiered.num_seeds = defaults.num_seeds;
(*params)->tiered.sync_window_scale = defaults.sync_window_scale;
(*params)->tiered.sync_drop_threshold = defaults.sync_drop_threshold;
(*params)->tiered.num_queues = defaults.num_queues;
(*params)->tiered.empty_pause = defaults.empty_pause;
(*params)->tiered.collect_statistics = defaults.collect_statistics;
(*params)->tiered.keep_pollers_running = defaults.keep_pollers_running;

});
}

Expand All @@ -2434,6 +2592,10 @@ extern "C" cuvsError_t cuvsCagraDeserializeGraph(cuvsResources_t res,
"cuvsCagraDeserializeGraph: null index handle");
auto const header = read_serialized_header(res, filename);
dispatch_serialized_dtype(header.dtype, [&]<typename T>() {
if (header.tiered_pq) {
deserialize_tiered_pq<T>(res, filename, index, header.dtype);
return;
}
using view_t = cuvs::neighbors::device_padded_dataset_view<T, int64_t>;
_deserialize<T, view_t>(
res, filename, index, header.dtype, false, nullptr);
Expand All @@ -2460,6 +2622,10 @@ cuvsCagraDeserializeGraphAndDataset(cuvsResources_t res, const char *filename,
"must be null");
auto const header = read_serialized_header(res, filename);
dispatch_serialized_dtype(header.dtype, [&]<typename T>() {
if (header.tiered_pq) {
deserialize_tiered_pq<T>(res, filename, index, header.dtype);
return;
}
dispatch_serialized_dataset_kind<T>(header.dataset_kind, [&]<typename ViewT>() {
_deserialize<T, ViewT>(
res, filename, index, header.dtype, true, out_dataset);
Expand Down
3 changes: 3 additions & 0 deletions c/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ ConfigureTest(NAME IVF_FLAT_C_TEST PATH neighbors/run_ivf_flat_c.c neighbors/ann
ConfigureTest(NAME IVF_PQ_C_TEST PATH neighbors/run_ivf_pq_c.c neighbors/ann_ivf_pq_c.cu)
ConfigureTest(NAME IVF_SQ_C_TEST PATH neighbors/run_ivf_sq_c.c neighbors/ann_ivf_sq_c.cu)
ConfigureTest(NAME CAGRA_C_TEST PATH neighbors/ann_cagra_c.cu)
target_compile_definitions(
CAGRA_C_TEST PRIVATE $<$<BOOL:${CUVS_ENABLE_FLOWANN_BUILD}>:CUVS_ENABLE_FLOWANN_BUILD>
)
ConfigureTest(NAME MG_C_TEST PATH neighbors/run_mg_c.c neighbors/ann_mg_c.cu)
ConfigureTest(
NAME ALL_NEIGHBORS_C_TEST PATH neighbors/run_all_neighbors_c.c neighbors/all_neighbors_c.cu
Expand Down
Loading
Loading