diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 9f9763160c..1a02128d99 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1387,6 +1387,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 @@ -1529,15 +1543,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 - 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_build_inst_files} + src/neighbors/vamana_codebooks.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_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 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..2dac548ad6 --- /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