diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-04-27 21:14:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-27 21:14:08 +0200 |
commit | 8d4fa4fb04a693d4437fe846ffa85dbcf26833f3 (patch) | |
tree | 3bd4b0337ae32d13e73f1e5bad65e3c4a75c92d3 | |
parent | 7f3033cfd7de3780319363c2797e834eb33958c3 (diff) | |
parent | 7974a765af95bacf5462cd61bc3eb7d5d4c0a692 (diff) |
Merge pull request #31067 from vespa-engine/balder/drop-out-early-if-vector-is-invalid
If candidate is invalid drop out early
-rw-r--r-- | searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp b/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp index 1db688156e0..322965ca06a 100644 --- a/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp +++ b/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp @@ -672,15 +672,15 @@ HnswIndex<type>::mutual_reconnect(const LinkArrayRef &cluster, uint32_t level) std::vector<PairDist> pairs; for (uint32_t i = 0; i + 1 < cluster.size(); ++i) { uint32_t n_id_1 = cluster[i]; + TypedCells n_cells_1 = get_vector(n_id_1); + if (n_cells_1.non_existing_attribute_value()) [[unlikely]] continue; LinkArrayRef n_list_1 = _graph.get_link_array(n_id_1, level); - std::unique_ptr<BoundDistanceFunction> df; + std::unique_ptr<BoundDistanceFunction> df = _distance_ff->for_insertion_vector(n_cells_1); for (uint32_t j = i + 1; j < cluster.size(); ++j) { uint32_t n_id_2 = cluster[j]; - if (has_link_to(n_list_1, n_id_2)) continue; - if (!df) { - df = _distance_ff->for_insertion_vector(get_vector(n_id_1)); + if ( ! has_link_to(n_list_1, n_id_2)) { + pairs.emplace_back(n_id_1, n_id_2, calc_distance(*df, n_id_2)); } - pairs.emplace_back(n_id_1, n_id_2, calc_distance(*df, n_id_2)); } } std::sort(pairs.begin(), pairs.end()); |