Skip to content

Commit

Permalink
Refactor: Deprecate search_around pagination
Browse files Browse the repository at this point in the history
  • Loading branch information
ashvardanian committed Jul 19, 2023
1 parent 49e4b20 commit 48c55a6
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 110 deletions.
28 changes: 0 additions & 28 deletions cpp/bench.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -311,26 +311,6 @@ void search_many( //
}
}

template <typename index_at, typename vector_id_at, typename real_at>
void paginate_many( //
index_at& native, std::size_t n, real_at const* vectors, std::size_t dims, std::size_t wanted,
vector_id_at const* hints) {

std::string name = "Paginate " + std::to_string(wanted);
running_stats_printer_t printer{n, name.c_str()};

#pragma omp parallel for schedule(static, 32)
for (std::size_t i = 0; i < n; ++i) {
search_config_t config;
config.thread = omp_get_thread_num();
vector_view_t vector{vectors + dims * i, dims};
native.search_around(hints[i], vector, wanted, config);
printer.progress++;
if (omp_get_thread_num() == 0)
printer.refresh();
}
}

template <typename dataset_at, typename index_at> //
static void single_shot(dataset_at& dataset, index_at& index, bool construct = true) {
using label_t = typename index_at::label_t;
Expand Down Expand Up @@ -397,14 +377,6 @@ static void single_shot(dataset_at& dataset, index_at& index, bool construct = t
std::printf("Unmatched %.2f %% (%zu items)\n", unmatched_count * 100.f / index.size(), unmatched_count);
std::printf("Proposals %.2f / man (%zu total)\n", join_attempts * 1.f / index.size(), join_attempts);

// Paginate
std::vector<vector_id_t> hints(dataset.queries_count());
for (std::size_t i = 0; i != hints.size(); ++i)
hints[i] = dataset.neighborhood(i)[0];
paginate_many(index, dataset.queries_count(), dataset.query(0), dataset.dimensions(), 10, hints.data());
paginate_many(index, dataset.queries_count(), dataset.query(0), dataset.dimensions(), 100, hints.data());
paginate_many(index, dataset.queries_count(), dataset.query(0), dataset.dimensions(), 1000, hints.data());

std::printf("------------\n");
std::printf("\n");
}
Expand Down
34 changes: 0 additions & 34 deletions include/usearch/index.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2128,40 +2128,6 @@ class index_gt {
return result;
}

template <typename predicate_at = dummy_predicate_t>
search_result_t search_around( //
id_t hint, vector_view_t query, std::size_t wanted, //
search_config_t config = {}, predicate_at&& predicate = dummy_predicate_t{}) const noexcept {

context_t& context = contexts_[config.thread];
top_candidates_t& top = context.top_candidates;
next_candidates_t& next = context.next_candidates;
search_result_t result{*this, top};

if (!size_)
return result;

std::size_t expansion = (std::max)(config.expansion, wanted);
if (!next.reserve(expansion))
return result.failed("Out of memory!");
if (!top.reserve(expansion))
return result.failed("Out of memory!");

// Go down the level, tracking only the closest match
result.measurements = context.measurements_count;
result.cycles = context.iteration_cycles;

search_to_find_in_base_(hint, query, expansion, context, std::forward<predicate_at>(predicate));
top.sort_ascending();
top.shrink(wanted);

// Normalize stats
result.measurements = context.measurements_count - result.measurements;
result.cycles = context.iteration_cycles - result.cycles;
result.count = top.size();
return result;
}

#pragma endregion

#pragma region Metadata
Expand Down
48 changes: 0 additions & 48 deletions include/usearch/index_punned_dense.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,18 +281,6 @@ class index_punned_dense_gt {
search_result_t search(f32_t const* vector, std::size_t wanted, search_config_t config) const { return search_(vector, wanted, config, casts_.from_f32); }
search_result_t search(f64_t const* vector, std::size_t wanted, search_config_t config) const { return search_(vector, wanted, config, casts_.from_f64); }

search_result_t search_around(label_t hint, b1x8_t const* vector, std::size_t wanted) const { return search_around_(hint, vector, wanted, casts_.from_b1x8); }
search_result_t search_around(label_t hint, f8_bits_t const* vector, std::size_t wanted) const { return search_around_(hint, vector, wanted, casts_.from_f8); }
search_result_t search_around(label_t hint, f16_t const* vector, std::size_t wanted) const { return search_around_(hint, vector, wanted, casts_.from_f16); }
search_result_t search_around(label_t hint, f32_t const* vector, std::size_t wanted) const { return search_around_(hint, vector, wanted, casts_.from_f32); }
search_result_t search_around(label_t hint, f64_t const* vector, std::size_t wanted) const { return search_around_(hint, vector, wanted, casts_.from_f64); }

search_result_t search_around(label_t hint, b1x8_t const* vector, std::size_t wanted, search_config_t config) const { return search_around_(hint, vector, wanted, config, casts_.from_b1x8); }
search_result_t search_around(label_t hint, f8_bits_t const* vector, std::size_t wanted, search_config_t config) const { return search_around_(hint, vector, wanted, config, casts_.from_f8); }
search_result_t search_around(label_t hint, f16_t const* vector, std::size_t wanted, search_config_t config) const { return search_around_(hint, vector, wanted, config, casts_.from_f16); }
search_result_t search_around(label_t hint, f32_t const* vector, std::size_t wanted, search_config_t config) const { return search_around_(hint, vector, wanted, config, casts_.from_f32); }
search_result_t search_around(label_t hint, f64_t const* vector, std::size_t wanted, search_config_t config) const { return search_around_(hint, vector, wanted, config, casts_.from_f64); }

search_result_t empty_search_result() const { return search_result_t{*typed_}; }

bool get(label_t label, b1x8_t* vector) const { return get_(label, vector, casts_.to_b1x8); }
Expand Down Expand Up @@ -454,32 +442,6 @@ class index_punned_dense_gt {
return typed_->search({vector_data, vector_bytes}, wanted, config);
}

template <typename scalar_at>
search_result_t search_around_( //
label_t hint, scalar_at const* vector, std::size_t wanted, //
search_config_t config, cast_t const& cast) const {

byte_t const* vector_data = reinterpret_cast<byte_t const*>(vector);
std::size_t vector_bytes = dimensions_ * sizeof(scalar_at);

byte_t* casted_data = cast_buffer_.data() + casted_vector_bytes_ * config.thread;
bool casted = cast(vector_data, dimensions_, casted_data);
if (casted)
vector_data = casted_data, vector_bytes = casted_vector_bytes_;

return typed_->search_around(static_cast<id_t>(hint), {vector_data, vector_bytes}, wanted, config);
}

void reindex_labels() {
shared_lock_t lock(lookup_table_mutex_);
lookup_table_.clear();
for (std::size_t i = 0; i != typed_->size(); ++i) {
member_citerator_t iterator = typed_->cbegin() + i;
member_cref_t member = *iterator;
lookup_table_[member.label] = static_cast<id_t>(i);
}
}

id_t lookup_id_(label_t label) const {
shared_lock_t lock(lookup_table_mutex_);
return lookup_table_.at(label);
Expand Down Expand Up @@ -520,16 +482,6 @@ class index_punned_dense_gt {
return search_(vector, wanted, search_config, cast);
}

template <typename scalar_at>
search_result_t search_around_( //
label_t hint, scalar_at const* vector, std::size_t wanted, //
cast_t const& cast) const {
thread_lock_t lock = thread_lock_();
search_config_t search_config;
search_config.thread = lock.thread_id;
return search_around_(hint, vector, wanted, search_config, cast);
}

static index_punned_dense_gt make_( //
std::size_t dimensions, scalar_kind_t scalar_kind, //
index_config_t config, std::size_t expansion_add, std::size_t expansion_search, //
Expand Down

0 comments on commit 48c55a6

Please sign in to comment.