From f414290ff8c7adf757c197e075dfff085b8bb1b4 Mon Sep 17 00:00:00 2001 From: aamijar Date: Thu, 24 Sep 2026 20:31:08 +0000 Subject: [PATCH 1/3] vamana-inst-matrix --- cpp/CMakeLists.txt | 24 ++++++++----- cpp/src/neighbors/vamana.cuh | 7 ++-- cpp/src/neighbors/vamana_build_float.cu | 32 ----------------- cpp/src/neighbors/vamana_build_half.cu | 33 ----------------- cpp/src/neighbors/vamana_build_inst.cu.in | 36 +++++++++++++++++++ cpp/src/neighbors/vamana_build_int8.cu | 32 ----------------- cpp/src/neighbors/vamana_build_uint8.cu | 32 ----------------- cpp/src/neighbors/vamana_matrix.json | 20 +++++++++++ cpp/src/neighbors/vamana_serialize.cuh | 30 ---------------- cpp/src/neighbors/vamana_serialize_float.cu | 12 ------- cpp/src/neighbors/vamana_serialize_half.cu | 13 ------- cpp/src/neighbors/vamana_serialize_inst.cu.in | 30 ++++++++++++++++ cpp/src/neighbors/vamana_serialize_int8.cu | 12 ------- cpp/src/neighbors/vamana_serialize_uint8.cu | 12 ------- 14 files changed, 107 insertions(+), 218 deletions(-) delete mode 100644 cpp/src/neighbors/vamana_build_float.cu delete mode 100644 cpp/src/neighbors/vamana_build_half.cu create mode 100644 cpp/src/neighbors/vamana_build_inst.cu.in delete mode 100644 cpp/src/neighbors/vamana_build_int8.cu delete mode 100644 cpp/src/neighbors/vamana_build_uint8.cu create mode 100644 cpp/src/neighbors/vamana_matrix.json delete mode 100644 cpp/src/neighbors/vamana_serialize.cuh delete mode 100644 cpp/src/neighbors/vamana_serialize_float.cu delete mode 100644 cpp/src/neighbors/vamana_serialize_half.cu create mode 100644 cpp/src/neighbors/vamana_serialize_inst.cu.in delete mode 100644 cpp/src/neighbors/vamana_serialize_int8.cu delete mode 100644 cpp/src/neighbors/vamana_serialize_uint8.cu diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index ef9977f72c..420de00cf8 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1379,6 +1379,20 @@ if(NOT BUILD_CPU_ONLY) OUTPUT_FILE_FORMAT "${CMAKE_CURRENT_BINARY_DIR}/src/neighbors/nn_descent_inst_data_@data_abbrev@_index_@index_abbrev@.cu" ) + generate_inst_matrix( + vamana_build_inst_files + MATRIX_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/neighbors/vamana_matrix.json" + INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/neighbors/vamana_build_inst.cu.in" + OUTPUT_FILE_FORMAT + "${CMAKE_CURRENT_BINARY_DIR}/src/neighbors/vamana_build_inst_data_@data_abbrev@.cu" + ) + generate_inst_matrix( + vamana_serialize_inst_files + MATRIX_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/neighbors/vamana_matrix.json" + INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/neighbors/vamana_serialize_inst.cu.in" + OUTPUT_FILE_FORMAT + "${CMAKE_CURRENT_BINARY_DIR}/src/neighbors/vamana_serialize_inst_data_@data_abbrev@.cu" + ) generate_inst_matrix( refine_device_inst_files MATRIX_JSON_FILE @@ -1521,15 +1535,9 @@ if(NOT BUILD_CPU_ONLY) src/neighbors/sample_filter.cu src/neighbors/tiered_index.cu src/neighbors/sparse_brute_force.cu - src/neighbors/vamana_build_float.cu - src/neighbors/vamana_build_half.cu - src/neighbors/vamana_build_uint8.cu - src/neighbors/vamana_build_int8.cu + ${vamana_build_inst_files} src/neighbors/vamana_codebooks_float.cu - src/neighbors/vamana_serialize_float.cu - src/neighbors/vamana_serialize_half.cu - src/neighbors/vamana_serialize_uint8.cu - src/neighbors/vamana_serialize_int8.cu + ${vamana_serialize_inst_files} src/preprocessing/quantize/scalar.cu src/preprocessing/quantize/binary.cu src/preprocessing/quantize/pq.cu diff --git a/cpp/src/neighbors/vamana.cuh b/cpp/src/neighbors/vamana.cuh index 470f2d1259..33993ae083 100644 --- a/cpp/src/neighbors/vamana.cuh +++ b/cpp/src/neighbors/vamana.cuh @@ -80,9 +80,12 @@ index build( template void serialize(raft::resources const& res, const std::string& file_prefix, - const index& index_) + const index& index_, + bool include_dataset = true, + bool sector_aligned = false) { - cuvs::neighbors::vamana::detail::serialize(res, file_prefix, index_); + cuvs::neighbors::vamana::detail::serialize( + res, file_prefix, index_, include_dataset, sector_aligned); } template diff --git a/cpp/src/neighbors/vamana_build_float.cu b/cpp/src/neighbors/vamana_build_float.cu deleted file mode 100644 index 583315875e..0000000000 --- a/cpp/src/neighbors/vamana_build_float.cu +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "vamana.cuh" -#include - -namespace cuvs::neighbors::vamana { - -#define RAFT_INST_VAMANA_BUILD(T, IdxT) \ - auto build(raft::resources const& handle, \ - const cuvs::neighbors::vamana::index_params& params, \ - raft::device_matrix_view dataset) \ - -> cuvs::neighbors::vamana::index \ - { \ - return cuvs::neighbors::vamana::build(handle, params, dataset); \ - } \ - \ - auto build(raft::resources const& handle, \ - const cuvs::neighbors::vamana::index_params& params, \ - raft::host_matrix_view dataset) \ - -> cuvs::neighbors::vamana::index \ - { \ - return cuvs::neighbors::vamana::build(handle, params, dataset); \ - } - -RAFT_INST_VAMANA_BUILD(float, uint32_t); - -#undef RAFT_INST_VAMANA_BUILD - -} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_build_half.cu b/cpp/src/neighbors/vamana_build_half.cu deleted file mode 100644 index b324d2214f..0000000000 --- a/cpp/src/neighbors/vamana_build_half.cu +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "vamana.cuh" -#include -#include - -namespace cuvs::neighbors::vamana { - -#define RAFT_INST_VAMANA_BUILD(T, IdxT) \ - auto build(raft::resources const& handle, \ - const cuvs::neighbors::vamana::index_params& params, \ - raft::device_matrix_view dataset) \ - -> cuvs::neighbors::vamana::index \ - { \ - return cuvs::neighbors::vamana::build(handle, params, dataset); \ - } \ - \ - auto build(raft::resources const& handle, \ - const cuvs::neighbors::vamana::index_params& params, \ - raft::host_matrix_view dataset) \ - -> cuvs::neighbors::vamana::index \ - { \ - return cuvs::neighbors::vamana::build(handle, params, dataset); \ - } - -RAFT_INST_VAMANA_BUILD(half, uint32_t); - -#undef RAFT_INST_VAMANA_BUILD - -} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_build_inst.cu.in b/cpp/src/neighbors/vamana_build_inst.cu.in new file mode 100644 index 0000000000..10769c3c44 --- /dev/null +++ b/cpp/src/neighbors/vamana_build_inst.cu.in @@ -0,0 +1,36 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +#include +#include + +namespace { + +using data_t = @data_type@; +using index_t = uint32_t; + +} // namespace + +namespace cuvs::neighbors::vamana { + +auto build(raft::resources const& handle, + const index_params& params, + raft::device_matrix_view dataset) + -> index +{ + return cuvs::neighbors::vamana::build(handle, params, dataset); +} + +auto build(raft::resources const& handle, + const index_params& params, + raft::host_matrix_view dataset) + -> index +{ + return cuvs::neighbors::vamana::build(handle, params, dataset); +} + +} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_build_int8.cu b/cpp/src/neighbors/vamana_build_int8.cu deleted file mode 100644 index c33aafa22d..0000000000 --- a/cpp/src/neighbors/vamana_build_int8.cu +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "vamana.cuh" -#include - -namespace cuvs::neighbors::vamana { - -#define RAFT_INST_VAMANA_BUILD(T, IdxT) \ - auto build(raft::resources const& handle, \ - const cuvs::neighbors::vamana::index_params& params, \ - raft::device_matrix_view dataset) \ - -> cuvs::neighbors::vamana::index \ - { \ - return cuvs::neighbors::vamana::build(handle, params, dataset); \ - } \ - \ - auto build(raft::resources const& handle, \ - const cuvs::neighbors::vamana::index_params& params, \ - raft::host_matrix_view dataset) \ - -> cuvs::neighbors::vamana::index \ - { \ - return cuvs::neighbors::vamana::build(handle, params, dataset); \ - } - -RAFT_INST_VAMANA_BUILD(int8_t, uint32_t); - -#undef RAFT_INST_VAMANA_BUILD - -} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_build_uint8.cu b/cpp/src/neighbors/vamana_build_uint8.cu deleted file mode 100644 index 2fa77f5e51..0000000000 --- a/cpp/src/neighbors/vamana_build_uint8.cu +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "vamana.cuh" -#include - -namespace cuvs::neighbors::vamana { - -#define RAFT_INST_VAMANA_BUILD(T, IdxT) \ - auto build(raft::resources const& handle, \ - const cuvs::neighbors::vamana::index_params& params, \ - raft::device_matrix_view dataset) \ - -> cuvs::neighbors::vamana::index \ - { \ - return cuvs::neighbors::vamana::build(handle, params, dataset); \ - } \ - \ - auto build(raft::resources const& handle, \ - const cuvs::neighbors::vamana::index_params& params, \ - raft::host_matrix_view dataset) \ - -> cuvs::neighbors::vamana::index \ - { \ - return cuvs::neighbors::vamana::build(handle, params, dataset); \ - } - -RAFT_INST_VAMANA_BUILD(uint8_t, uint32_t); - -#undef RAFT_INST_VAMANA_BUILD - -} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_matrix.json b/cpp/src/neighbors/vamana_matrix.json new file mode 100644 index 0000000000..dedfa947d2 --- /dev/null +++ b/cpp/src/neighbors/vamana_matrix.json @@ -0,0 +1,20 @@ +{ + "_data": [ + { + "data_type": "float", + "data_abbrev": "f" + }, + { + "data_type": "half", + "data_abbrev": "h" + }, + { + "data_type": "int8_t", + "data_abbrev": "i8" + }, + { + "data_type": "uint8_t", + "data_abbrev": "u8" + } + ] +} diff --git a/cpp/src/neighbors/vamana_serialize.cuh b/cpp/src/neighbors/vamana_serialize.cuh deleted file mode 100644 index 85a5a22472..0000000000 --- a/cpp/src/neighbors/vamana_serialize.cuh +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#pragma once - -#include "detail/vamana/vamana_serialize.cuh" - -namespace cuvs::neighbors::vamana { - -/** - * @defgroup VAMANA graph serialize/derserialize - * @{ - */ - -#define CUVS_INST_VAMANA_SERIALIZE(DTYPE) \ - void serialize(raft::resources const& handle, \ - const std::string& file_prefix, \ - const cuvs::neighbors::vamana::index& index_, \ - bool include_dataset, \ - bool sector_aligned) \ - { \ - cuvs::neighbors::vamana::detail::serialize( \ - handle, file_prefix, index_, include_dataset, sector_aligned); \ - }; - -/** @} */ // end group vamana - -} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_serialize_float.cu b/cpp/src/neighbors/vamana_serialize_float.cu deleted file mode 100644 index 89a697038d..0000000000 --- a/cpp/src/neighbors/vamana_serialize_float.cu +++ /dev/null @@ -1,12 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "vamana_serialize.cuh" - -namespace cuvs::neighbors::vamana { - -CUVS_INST_VAMANA_SERIALIZE(float); - -} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_serialize_half.cu b/cpp/src/neighbors/vamana_serialize_half.cu deleted file mode 100644 index 758d113bc0..0000000000 --- a/cpp/src/neighbors/vamana_serialize_half.cu +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "vamana_serialize.cuh" -#include - -namespace cuvs::neighbors::vamana { - -CUVS_INST_VAMANA_SERIALIZE(half); - -} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_serialize_inst.cu.in b/cpp/src/neighbors/vamana_serialize_inst.cu.in new file mode 100644 index 0000000000..a9d8d179e8 --- /dev/null +++ b/cpp/src/neighbors/vamana_serialize_inst.cu.in @@ -0,0 +1,30 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +#include +#include + +namespace { + +using data_t = @data_type@; +using index_t = uint32_t; + +} // namespace + +namespace cuvs::neighbors::vamana { + +void serialize(raft::resources const& handle, + const std::string& file_prefix, + const index& index_, + bool include_dataset, + bool sector_aligned) +{ + cuvs::neighbors::vamana::serialize( + handle, file_prefix, index_, include_dataset, sector_aligned); +} + +} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_serialize_int8.cu b/cpp/src/neighbors/vamana_serialize_int8.cu deleted file mode 100644 index 75c70e7845..0000000000 --- a/cpp/src/neighbors/vamana_serialize_int8.cu +++ /dev/null @@ -1,12 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "vamana_serialize.cuh" - -namespace cuvs::neighbors::vamana { - -CUVS_INST_VAMANA_SERIALIZE(int8_t); - -} // namespace cuvs::neighbors::vamana diff --git a/cpp/src/neighbors/vamana_serialize_uint8.cu b/cpp/src/neighbors/vamana_serialize_uint8.cu deleted file mode 100644 index 429350d3c5..0000000000 --- a/cpp/src/neighbors/vamana_serialize_uint8.cu +++ /dev/null @@ -1,12 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "vamana_serialize.cuh" - -namespace cuvs::neighbors::vamana { - -CUVS_INST_VAMANA_SERIALIZE(uint8_t); - -} // namespace cuvs::neighbors::vamana From 71ce2f8714888da37e358b95d0756362d8dc63f8 Mon Sep 17 00:00:00 2001 From: aamijar Date: Thu, 24 Sep 2026 20:47:01 +0000 Subject: [PATCH 2/3] fix header --- cpp/src/neighbors/vamana_serialize_inst.cu.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/neighbors/vamana_serialize_inst.cu.in b/cpp/src/neighbors/vamana_serialize_inst.cu.in index a9d8d179e8..2dac548ad6 100644 --- a/cpp/src/neighbors/vamana_serialize_inst.cu.in +++ b/cpp/src/neighbors/vamana_serialize_inst.cu.in @@ -6,7 +6,7 @@ #include #include -#include +#include namespace { From 145643e6dee11fccf4ee86f76888627ab49c04de Mon Sep 17 00:00:00 2001 From: aamijar Date: Thu, 24 Sep 2026 21:19:36 +0000 Subject: [PATCH 3/3] rename file --- cpp/CMakeLists.txt | 2 +- .../{vamana_codebooks_float.cu => vamana_codebooks.cu} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename cpp/src/neighbors/{vamana_codebooks_float.cu => vamana_codebooks.cu} (100%) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 420de00cf8..0b70ad7e5c 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1536,7 +1536,7 @@ if(NOT BUILD_CPU_ONLY) src/neighbors/tiered_index.cu src/neighbors/sparse_brute_force.cu ${vamana_build_inst_files} - src/neighbors/vamana_codebooks_float.cu + src/neighbors/vamana_codebooks.cu ${vamana_serialize_inst_files} src/preprocessing/quantize/scalar.cu src/preprocessing/quantize/binary.cu diff --git a/cpp/src/neighbors/vamana_codebooks_float.cu b/cpp/src/neighbors/vamana_codebooks.cu similarity index 100% rename from cpp/src/neighbors/vamana_codebooks_float.cu rename to cpp/src/neighbors/vamana_codebooks.cu