Skip to content

Commit

Permalink
Merge pull request #377 from rapidsai/branch-24.10
Browse files Browse the repository at this point in the history
Forward-merge branch-24.10 into branch-24.12
  • Loading branch information
GPUtester authored Oct 2, 2024
2 parents 5d729d3 + 6c0fd14 commit 2b884ca
Show file tree
Hide file tree
Showing 78 changed files with 891 additions and 839 deletions.
5 changes: 1 addition & 4 deletions cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,7 @@ add_library(
src/cluster/kmeans_transform_double.cu
src/cluster/kmeans_transform_float.cu
src/cluster/single_linkage_float.cu
src/core/bitset.cu
src/distance/detail/pairwise_matrix/dispatch_canberra_float_float_float_int.cu
src/distance/detail/pairwise_matrix/dispatch_canberra_half_float_float_int.cu
src/distance/detail/pairwise_matrix/dispatch_canberra_double_double_double_int.cu
Expand Down Expand Up @@ -406,10 +407,6 @@ add_library(
src/neighbors/ivf_pq/detail/ivf_pq_search_half_int64_t.cu
src/neighbors/ivf_pq/detail/ivf_pq_search_int8_t_int64_t.cu
src/neighbors/ivf_pq/detail/ivf_pq_search_uint8_t_int64_t.cu
src/neighbors/ivf_pq/detail/ivf_pq_search_with_filter_float_int64_t.cu
src/neighbors/ivf_pq/detail/ivf_pq_search_with_filter_half_int64_t.cu
src/neighbors/ivf_pq/detail/ivf_pq_search_with_filter_int8_t_int64_t.cu
src/neighbors/ivf_pq/detail/ivf_pq_search_with_filter_uint8_t_int64_t.cu
src/neighbors/nn_descent.cu
src/neighbors/nn_descent_float.cu
src/neighbors/nn_descent_half.cu
Expand Down
8 changes: 4 additions & 4 deletions cpp/bench/ann/src/cuvs/cuvs_brute_force_knn.cu
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ class BruteForceKNNBenchmark {
search_queries.data(), params_.num_queries, params_.dim),
indices,
distances,
std::nullopt);
cuvs::neighbors::filtering::none_sample_filter{});
flush_l2_cache();
raft::resource::sync_stream(handle_, stream_);
}
Expand All @@ -158,7 +158,7 @@ class BruteForceKNNBenchmark {
search_queries.data(), params_.num_queries, params_.dim),
indices,
distances,
std::nullopt);
cuvs::neighbors::filtering::none_sample_filter{});
raft::resource::sync_stream(handle_, stream_);
end = std::chrono::high_resolution_clock::now();
search_dur = end - start;
Expand All @@ -178,7 +178,7 @@ class BruteForceKNNBenchmark {
search_queries.data(), params_.num_queries, params_.dim),
indices,
distances,
std::nullopt);
cuvs::neighbors::filtering::none_sample_filter{});
flush_l2_cache();
raft::resource::sync_stream(handle_, stream_);
}
Expand All @@ -202,7 +202,7 @@ class BruteForceKNNBenchmark {
search_queries.data(), params_.num_queries, params_.dim),
indices,
distances,
std::nullopt);
cuvs::neighbors::filtering::none_sample_filter{});
raft::resource::sync_stream(handle_, stream_);
end = std::chrono::high_resolution_clock::now();
search_dur = end - start;
Expand Down
8 changes: 6 additions & 2 deletions cpp/bench/ann/src/cuvs/cuvs_wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,12 @@ void cuvs_gpu<T>::search(
raft::make_device_matrix_view<algo_base::index_type, int64_t>(neighbors, batch_size, k);
auto distances_view = raft::make_device_matrix_view<float, int64_t>(distances, batch_size, k);

cuvs::neighbors::brute_force::search(
handle_, *index_, queries_view, neighbors_view, distances_view, std::nullopt);
cuvs::neighbors::brute_force::search(handle_,
*index_,
queries_view,
neighbors_view,
distances_view,
cuvs::neighbors::filtering::none_sample_filter{});
}

template <typename T>
Expand Down
6 changes: 6 additions & 0 deletions cpp/include/cuvs/core/bitset.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@

#include <raft/core/bitset.hpp>

extern template struct raft::core::bitset<uint8_t, uint32_t>;
extern template struct raft::core::bitset<uint16_t, uint32_t>;
extern template struct raft::core::bitset<uint32_t, uint32_t>;
extern template struct raft::core::bitset<uint32_t, int64_t>;
extern template struct raft::core::bitset<uint64_t, int64_t>;

namespace cuvs::core {
/* To use bitset functions containing CUDA code, include <raft/core/bitset.cuh> */

Expand Down
12 changes: 8 additions & 4 deletions cpp/include/cuvs/neighbors/brute_force.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,8 @@ void search(raft::resources const& handle,
raft::device_matrix_view<const float, int64_t, raft::row_major> queries,
raft::device_matrix_view<int64_t, int64_t, raft::row_major> neighbors,
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
std::optional<cuvs::core::bitmap_view<const uint32_t, int64_t>> sample_filter);
const cuvs::neighbors::filtering::base_filter& sample_filter =
cuvs::neighbors::filtering::none_sample_filter{});

/**
* @brief Search ANN using the constructed index.
Expand Down Expand Up @@ -326,7 +327,8 @@ void search(raft::resources const& handle,
raft::device_matrix_view<const half, int64_t, raft::row_major> queries,
raft::device_matrix_view<int64_t, int64_t, raft::row_major> neighbors,
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
std::optional<cuvs::core::bitmap_view<const uint32_t, int64_t>> sample_filter);
const cuvs::neighbors::filtering::base_filter& sample_filter =
cuvs::neighbors::filtering::none_sample_filter{});
/**
* @brief Search ANN using the constructed index.
*
Expand All @@ -346,7 +348,8 @@ void search(raft::resources const& handle,
raft::device_matrix_view<const float, int64_t, raft::col_major> queries,
raft::device_matrix_view<int64_t, int64_t, raft::row_major> neighbors,
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
std::optional<cuvs::core::bitmap_view<const uint32_t, int64_t>> sample_filter);
const cuvs::neighbors::filtering::base_filter& sample_filter =
cuvs::neighbors::filtering::none_sample_filter{});
/**
* @brief Search ANN using the constructed index.
*
Expand All @@ -366,7 +369,8 @@ void search(raft::resources const& handle,
raft::device_matrix_view<const half, int64_t, raft::col_major> queries,
raft::device_matrix_view<int64_t, int64_t, raft::row_major> neighbors,
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
std::optional<cuvs::core::bitmap_view<const uint32_t, int64_t>> sample_filter);
const cuvs::neighbors::filtering::base_filter& sample_filter =
cuvs::neighbors::filtering::none_sample_filter{});
/**
* @}
*/
Expand Down
25 changes: 21 additions & 4 deletions cpp/include/cuvs/neighbors/cagra.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1055,14 +1055,18 @@ void extend(
* [n_queries, k]
* @param[out] distances a device matrix view to the distances to the selected neighbors [n_queries,
* k]
* @param[in] sample_filter an optional device filter function object that greenlights samples
* for a given query. (none_sample_filter for no filtering)
*/

void search(raft::resources const& res,
cuvs::neighbors::cagra::search_params const& params,
const cuvs::neighbors::cagra::index<float, uint32_t>& index,
raft::device_matrix_view<const float, int64_t, raft::row_major> queries,
raft::device_matrix_view<uint32_t, int64_t, raft::row_major> neighbors,
raft::device_matrix_view<float, int64_t, raft::row_major> distances);
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
const cuvs::neighbors::filtering::base_filter& sample_filter =
cuvs::neighbors::filtering::none_sample_filter{});

/**
* @brief Search ANN using the constructed index.
Expand All @@ -1077,13 +1081,17 @@ void search(raft::resources const& res,
* [n_queries, k]
* @param[out] distances a device matrix view to the distances to the selected neighbors [n_queries,
* k]
* @param[in] sample_filter an optional device filter function object that greenlights samples
* for a given query. (none_sample_filter for no filtering)
*/
void search(raft::resources const& res,
cuvs::neighbors::cagra::search_params const& params,
const cuvs::neighbors::cagra::index<half, uint32_t>& index,
raft::device_matrix_view<const half, int64_t, raft::row_major> queries,
raft::device_matrix_view<uint32_t, int64_t, raft::row_major> neighbors,
raft::device_matrix_view<float, int64_t, raft::row_major> distances);
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
const cuvs::neighbors::filtering::base_filter& sample_filter =
cuvs::neighbors::filtering::none_sample_filter{});

/**
* @brief Search ANN using the constructed index.
Expand All @@ -1098,13 +1106,17 @@ void search(raft::resources const& res,
* [n_queries, k]
* @param[out] distances a device matrix view to the distances to the selected neighbors [n_queries,
* k]
* @param[in] sample_filter an optional device filter function object that greenlights samples
* for a given query. (none_sample_filter for no filtering)
*/
void search(raft::resources const& res,
cuvs::neighbors::cagra::search_params const& params,
const cuvs::neighbors::cagra::index<int8_t, uint32_t>& index,
raft::device_matrix_view<const int8_t, int64_t, raft::row_major> queries,
raft::device_matrix_view<uint32_t, int64_t, raft::row_major> neighbors,
raft::device_matrix_view<float, int64_t, raft::row_major> distances);
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
const cuvs::neighbors::filtering::base_filter& sample_filter =
cuvs::neighbors::filtering::none_sample_filter{});

/**
* @brief Search ANN using the constructed index.
Expand All @@ -1119,13 +1131,18 @@ void search(raft::resources const& res,
* [n_queries, k]
* @param[out] distances a device matrix view to the distances to the selected neighbors [n_queries,
* k]
* @param[in] sample_filter an optional device filter function object that greenlights samples
* for a given query. (none_sample_filter for no filtering)
*/
void search(raft::resources const& res,
cuvs::neighbors::cagra::search_params const& params,
const cuvs::neighbors::cagra::index<uint8_t, uint32_t>& index,
raft::device_matrix_view<const uint8_t, int64_t, raft::row_major> queries,
raft::device_matrix_view<uint32_t, int64_t, raft::row_major> neighbors,
raft::device_matrix_view<float, int64_t, raft::row_major> distances);
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
const cuvs::neighbors::filtering::base_filter& sample_filter =
cuvs::neighbors::filtering::none_sample_filter{});

/**
* @}
*/
Expand Down
2 changes: 1 addition & 1 deletion cpp/include/cuvs/neighbors/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ enum cuvsFilterType {
};

/**
* @brief Struct to hold address of cuvs::neighbor::prefilter and its type
* @brief Struct to hold address of cuvs::neighbors::prefilter and its type
*
*/
typedef struct {
Expand Down
31 changes: 26 additions & 5 deletions cpp/include/cuvs/neighbors/common.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -383,19 +383,20 @@ inline constexpr bool is_vpq_dataset_v = is_vpq_dataset<DatasetT>::value;

namespace filtering {

struct base_filter {
virtual ~base_filter() = default;
};

/* A filter that filters nothing. This is the default behavior. */
struct none_ivf_sample_filter {
struct none_sample_filter : public base_filter {
inline _RAFT_HOST_DEVICE bool operator()(
// query index
const uint32_t query_ix,
// the current inverted list index
const uint32_t cluster_ix,
// the index of the current sample inside the current inverted list
const uint32_t sample_ix) const;
};

/* A filter that filters nothing. This is the default behavior. */
struct none_cagra_sample_filter {
inline _RAFT_HOST_DEVICE bool operator()(
// query index
const uint32_t query_ix,
Expand Down Expand Up @@ -431,13 +432,33 @@ struct ivf_to_sample_filter {
const uint32_t sample_ix) const;
};

/**
* @brief Filter an index with a bitmap
*
* @tparam bitmap_t Data type of the bitmap
* @tparam index_t Indexing type
*/
template <typename bitmap_t, typename index_t>
struct bitmap_filter : public base_filter {
// View of the bitset to use as a filter
const cuvs::core::bitmap_view<bitmap_t, index_t> bitmap_view_;

bitmap_filter(const cuvs::core::bitmap_view<bitmap_t, index_t> bitmap_for_filtering);
inline _RAFT_HOST_DEVICE bool operator()(
// query index
const uint32_t query_ix,
// the index of the current sample
const uint32_t sample_ix) const;
};

/**
* @brief Filter an index with a bitset
*
* @tparam bitset_t Data type of the bitset
* @tparam index_t Indexing type
*/
template <typename bitset_t, typename index_t>
struct bitset_filter {
struct bitset_filter : public base_filter {
// View of the bitset to use as a filter
const cuvs::core::bitset_view<bitset_t, index_t> bitset_view_;

Expand Down
Loading

0 comments on commit 2b884ca

Please sign in to comment.