contrib/faiss/faiss/utils/extra_distances.cpp
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) Meta Platforms, Inc. and affiliates. |
3 | | * |
4 | | * This source code is licensed under the MIT license found in the |
5 | | * LICENSE file in the root directory of this source tree. |
6 | | */ |
7 | | |
8 | | // -*- c++ -*- |
9 | | |
10 | | #include <faiss/utils/extra_distances.h> |
11 | | |
12 | | #include <omp.h> |
13 | | #include <algorithm> |
14 | | #include <cmath> |
15 | | |
16 | | #include <faiss/impl/AuxIndexStructures.h> |
17 | | #include <faiss/impl/DistanceComputer.h> |
18 | | #include <faiss/utils/utils.h> |
19 | | |
20 | | namespace faiss { |
21 | | |
22 | | /*************************************************************************** |
23 | | * Distance functions (other than L2 and IP) |
24 | | ***************************************************************************/ |
25 | | |
26 | | namespace { |
27 | | |
28 | | struct Run_pairwise_extra_distances { |
29 | | using T = void; |
30 | | |
31 | | template <class VD> |
32 | | void f(VD vd, |
33 | | int64_t nq, |
34 | | const float* xq, |
35 | | int64_t nb, |
36 | | const float* xb, |
37 | | float* dis, |
38 | | int64_t ldq, |
39 | | int64_t ldb, |
40 | 0 | int64_t ldd) { |
41 | 0 | #pragma omp parallel for if (nq > 10) |
42 | 0 | for (int64_t i = 0; i < nq; i++) { |
43 | 0 | const float* xqi = xq + i * ldq; |
44 | 0 | const float* xbj = xb; |
45 | 0 | float* disi = dis + ldd * i; |
46 | |
|
47 | 0 | for (int64_t j = 0; j < nb; j++) { |
48 | 0 | disi[j] = vd(xqi, xbj); |
49 | 0 | xbj += ldb; |
50 | 0 | } |
51 | 0 | } Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE0EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE1EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE2EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE3EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE4EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE20EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE21EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE22EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE23EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE24EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE25EEEEEvT_lPKflS8_Pflll.omp_outlined_debug__ |
52 | 0 | } Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE0EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE1EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE2EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE3EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE4EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE20EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE21EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE22EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE23EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE24EEEEEvT_lPKflS8_Pflll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_128Run_pairwise_extra_distances1fINS_14VectorDistanceILNS_10MetricTypeE25EEEEEvT_lPKflS8_Pflll |
53 | | }; |
54 | | |
55 | | struct Run_knn_extra_metrics { |
56 | | using T = void; |
57 | | template <class VD> |
58 | | void f(VD vd, |
59 | | const float* x, |
60 | | const float* y, |
61 | | size_t nx, |
62 | | size_t ny, |
63 | | size_t k, |
64 | | float* distances, |
65 | 0 | int64_t* labels) { |
66 | 0 | size_t d = vd.d; |
67 | 0 | using C = typename VD::C; |
68 | 0 | size_t check_period = InterruptCallback::get_period_hint(ny * d); |
69 | 0 | check_period *= omp_get_max_threads(); |
70 | |
|
71 | 0 | for (size_t i0 = 0; i0 < nx; i0 += check_period) { |
72 | 0 | size_t i1 = std::min(i0 + check_period, nx); |
73 | |
|
74 | 0 | #pragma omp parallel for |
75 | 0 | for (int64_t i = i0; i < i1; i++) { |
76 | 0 | const float* x_i = x + i * d; |
77 | 0 | const float* y_j = y; |
78 | 0 | size_t j; |
79 | 0 | float* simi = distances + k * i; |
80 | 0 | int64_t* idxi = labels + k * i; |
81 | | |
82 | | // maxheap_heapify(k, simi, idxi); |
83 | 0 | heap_heapify<C>(k, simi, idxi); |
84 | 0 | for (j = 0; j < ny; j++) { |
85 | 0 | float disij = vd(x_i, y_j); |
86 | |
|
87 | 0 | if (C::cmp(simi[0], disij)) { |
88 | 0 | heap_replace_top<C>(k, simi, idxi, disij, j); |
89 | 0 | } |
90 | 0 | y_j += d; |
91 | 0 | } |
92 | | // maxheap_reorder(k, simi, idxi); |
93 | 0 | heap_reorder<C>(k, simi, idxi); |
94 | 0 | } Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE0EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE1EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE2EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE3EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE4EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE20EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE21EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE22EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE23EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE24EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE25EEEEEvT_PKfS8_mmmPfPl.omp_outlined_debug__ |
95 | 0 | InterruptCallback::check(); |
96 | 0 | } |
97 | 0 | } Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE0EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE1EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE2EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE3EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE4EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE20EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE21EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE22EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE23EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE24EEEEEvT_PKfS8_mmmPfPl Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121Run_knn_extra_metrics1fINS_14VectorDistanceILNS_10MetricTypeE25EEEEEvT_PKfS8_mmmPfPl |
98 | | }; |
99 | | |
100 | | template <class VD> |
101 | | struct ExtraDistanceComputer : FlatCodesDistanceComputer { |
102 | | VD vd; |
103 | | idx_t nb; |
104 | | const float* q; |
105 | | const float* b; |
106 | | |
107 | 0 | float symmetric_dis(idx_t i, idx_t j) final { |
108 | 0 | return vd(b + j * vd.d, b + i * vd.d); |
109 | 0 | } Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE0EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE1EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE2EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE3EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE4EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE20EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE21EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE22EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE23EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE24EEEE13symmetric_disEll Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE25EEEE13symmetric_disEll |
110 | | |
111 | 0 | float distance_to_code(const uint8_t* code) final { |
112 | 0 | return vd(q, (float*)code); |
113 | 0 | } Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE0EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE1EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE2EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE3EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE4EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE20EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE21EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE22EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE23EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE24EEEE16distance_to_codeEPKh Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE25EEEE16distance_to_codeEPKh |
114 | | |
115 | | ExtraDistanceComputer( |
116 | | const VD& vd, |
117 | | const float* xb, |
118 | | size_t nb, |
119 | | const float* q = nullptr) |
120 | 0 | : FlatCodesDistanceComputer((uint8_t*)xb, vd.d * sizeof(float)), |
121 | 0 | vd(vd), |
122 | 0 | nb(nb), |
123 | 0 | q(q), |
124 | 0 | b(xb) {}Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE0EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE1EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE2EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE3EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE4EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE20EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE21EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE22EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE23EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE24EEEEC2ERKS4_PKfmS9_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE25EEEEC2ERKS4_PKfmS9_ |
125 | | |
126 | 0 | void set_query(const float* x) override { |
127 | 0 | q = x; |
128 | 0 | } Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE0EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE1EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE2EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE3EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE4EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE20EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE21EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE22EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE23EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE24EEEE9set_queryEPKf Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_121ExtraDistanceComputerINS_14VectorDistanceILNS_10MetricTypeE25EEEE9set_queryEPKf |
129 | | }; |
130 | | |
131 | | struct Run_get_distance_computer { |
132 | | using T = FlatCodesDistanceComputer*; |
133 | | |
134 | | template <class VD> |
135 | | FlatCodesDistanceComputer* f( |
136 | | VD vd, |
137 | | const float* xb, |
138 | | size_t nb, |
139 | 0 | const float* q = nullptr) { |
140 | 0 | return new ExtraDistanceComputer<VD>(vd, xb, nb, q); |
141 | 0 | } Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE0EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE1EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE2EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE3EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE4EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE20EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE21EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE22EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE23EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE24EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ Unexecuted instantiation: extra_distances.cpp:_ZN5faiss12_GLOBAL__N_125Run_get_distance_computer1fINS_14VectorDistanceILNS_10MetricTypeE25EEEEEPNS_25FlatCodesDistanceComputerET_PKfmSA_ |
142 | | }; |
143 | | |
144 | | } // anonymous namespace |
145 | | |
146 | | void pairwise_extra_distances( |
147 | | int64_t d, |
148 | | int64_t nq, |
149 | | const float* xq, |
150 | | int64_t nb, |
151 | | const float* xb, |
152 | | MetricType mt, |
153 | | float metric_arg, |
154 | | float* dis, |
155 | | int64_t ldq, |
156 | | int64_t ldb, |
157 | 0 | int64_t ldd) { |
158 | 0 | if (nq == 0 || nb == 0) |
159 | 0 | return; |
160 | 0 | if (ldq == -1) |
161 | 0 | ldq = d; |
162 | 0 | if (ldb == -1) |
163 | 0 | ldb = d; |
164 | 0 | if (ldd == -1) |
165 | 0 | ldd = nb; |
166 | |
|
167 | 0 | Run_pairwise_extra_distances run; |
168 | 0 | dispatch_VectorDistance( |
169 | 0 | d, mt, metric_arg, run, nq, xq, nb, xb, dis, ldq, ldb, ldd); |
170 | 0 | } |
171 | | |
172 | | void knn_extra_metrics( |
173 | | const float* x, |
174 | | const float* y, |
175 | | size_t d, |
176 | | size_t nx, |
177 | | size_t ny, |
178 | | MetricType mt, |
179 | | float metric_arg, |
180 | | size_t k, |
181 | | float* distances, |
182 | 0 | int64_t* indexes) { |
183 | 0 | Run_knn_extra_metrics run; |
184 | 0 | dispatch_VectorDistance( |
185 | 0 | d, mt, metric_arg, run, x, y, nx, ny, k, distances, indexes); |
186 | 0 | } |
187 | | |
188 | | FlatCodesDistanceComputer* get_extra_distance_computer( |
189 | | size_t d, |
190 | | MetricType mt, |
191 | | float metric_arg, |
192 | | size_t nb, |
193 | 0 | const float* xb) { |
194 | 0 | Run_get_distance_computer run; |
195 | 0 | return dispatch_VectorDistance(d, mt, metric_arg, run, xb, nb); |
196 | 0 | } |
197 | | |
198 | | } // namespace faiss |