faiss 0.2.0 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/LICENSE.txt +1 -1
- data/README.md +7 -7
- data/ext/faiss/extconf.rb +6 -3
- data/ext/faiss/numo.hpp +4 -4
- data/ext/faiss/utils.cpp +1 -1
- data/ext/faiss/utils.h +1 -1
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +292 -291
- data/vendor/faiss/faiss/AutoTune.h +55 -56
- data/vendor/faiss/faiss/Clustering.cpp +365 -194
- data/vendor/faiss/faiss/Clustering.h +102 -35
- data/vendor/faiss/faiss/IVFlib.cpp +171 -195
- data/vendor/faiss/faiss/IVFlib.h +48 -51
- data/vendor/faiss/faiss/Index.cpp +85 -103
- data/vendor/faiss/faiss/Index.h +54 -48
- data/vendor/faiss/faiss/Index2Layer.cpp +126 -224
- data/vendor/faiss/faiss/Index2Layer.h +22 -36
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +407 -0
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +195 -0
- data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
- data/vendor/faiss/faiss/IndexBinary.h +140 -132
- data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
- data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
- data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
- data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
- data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
- data/vendor/faiss/faiss/IndexFlat.cpp +115 -176
- data/vendor/faiss/faiss/IndexFlat.h +42 -59
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +67 -0
- data/vendor/faiss/faiss/IndexFlatCodes.h +47 -0
- data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
- data/vendor/faiss/faiss/IndexHNSW.h +57 -41
- data/vendor/faiss/faiss/IndexIVF.cpp +545 -453
- data/vendor/faiss/faiss/IndexIVF.h +169 -118
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +316 -0
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +121 -0
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +247 -252
- data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +459 -517
- data/vendor/faiss/faiss/IndexIVFPQ.h +75 -67
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +406 -372
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +82 -57
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +104 -102
- data/vendor/faiss/faiss/IndexIVFPQR.h +33 -28
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +163 -150
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +38 -25
- data/vendor/faiss/faiss/IndexLSH.cpp +66 -113
- data/vendor/faiss/faiss/IndexLSH.h +20 -38
- data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
- data/vendor/faiss/faiss/IndexLattice.h +11 -16
- data/vendor/faiss/faiss/IndexNNDescent.cpp +229 -0
- data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
- data/vendor/faiss/faiss/IndexNSG.cpp +301 -0
- data/vendor/faiss/faiss/IndexNSG.h +85 -0
- data/vendor/faiss/faiss/IndexPQ.cpp +387 -495
- data/vendor/faiss/faiss/IndexPQ.h +64 -82
- data/vendor/faiss/faiss/IndexPQFastScan.cpp +143 -170
- data/vendor/faiss/faiss/IndexPQFastScan.h +46 -32
- data/vendor/faiss/faiss/IndexPreTransform.cpp +120 -150
- data/vendor/faiss/faiss/IndexPreTransform.h +33 -36
- data/vendor/faiss/faiss/IndexRefine.cpp +139 -127
- data/vendor/faiss/faiss/IndexRefine.h +32 -23
- data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
- data/vendor/faiss/faiss/IndexReplicas.h +62 -56
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +111 -172
- data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -59
- data/vendor/faiss/faiss/IndexShards.cpp +256 -240
- data/vendor/faiss/faiss/IndexShards.h +85 -73
- data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
- data/vendor/faiss/faiss/MatrixStats.h +7 -10
- data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
- data/vendor/faiss/faiss/MetaIndexes.h +40 -34
- data/vendor/faiss/faiss/MetricType.h +7 -7
- data/vendor/faiss/faiss/VectorTransform.cpp +654 -475
- data/vendor/faiss/faiss/VectorTransform.h +64 -89
- data/vendor/faiss/faiss/clone_index.cpp +78 -73
- data/vendor/faiss/faiss/clone_index.h +4 -9
- data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
- data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +198 -171
- data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
- data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
- data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
- data/vendor/faiss/faiss/gpu/GpuIcmEncoder.h +60 -0
- data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
- data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
- data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
- data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
- data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
- data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
- data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
- data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
- data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
- data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
- data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
- data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
- data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
- data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
- data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
- data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
- data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
- data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
- data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
- data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
- data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
- data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
- data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
- data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
- data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
- data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
- data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
- data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
- data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
- data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
- data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
- data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +503 -0
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +175 -0
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
- data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
- data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
- data/vendor/faiss/faiss/impl/FaissException.h +41 -29
- data/vendor/faiss/faiss/impl/HNSW.cpp +606 -617
- data/vendor/faiss/faiss/impl/HNSW.h +179 -200
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +855 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +244 -0
- data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
- data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
- data/vendor/faiss/faiss/impl/NSG.cpp +679 -0
- data/vendor/faiss/faiss/impl/NSG.h +199 -0
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
- data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
- data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
- data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +758 -0
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +188 -0
- data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +647 -707
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
- data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
- data/vendor/faiss/faiss/impl/index_read.cpp +631 -480
- data/vendor/faiss/faiss/impl/index_write.cpp +547 -407
- data/vendor/faiss/faiss/impl/io.cpp +76 -95
- data/vendor/faiss/faiss/impl/io.h +31 -41
- data/vendor/faiss/faiss/impl/io_macros.h +60 -29
- data/vendor/faiss/faiss/impl/kmeans1d.cpp +301 -0
- data/vendor/faiss/faiss/impl/kmeans1d.h +48 -0
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
- data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
- data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
- data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
- data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
- data/vendor/faiss/faiss/index_factory.cpp +619 -397
- data/vendor/faiss/faiss/index_factory.h +8 -6
- data/vendor/faiss/faiss/index_io.h +23 -26
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
- data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
- data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
- data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
- data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
- data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
- data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
- data/vendor/faiss/faiss/utils/Heap.h +186 -209
- data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
- data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
- data/vendor/faiss/faiss/utils/distances.cpp +305 -312
- data/vendor/faiss/faiss/utils/distances.h +170 -122
- data/vendor/faiss/faiss/utils/distances_simd.cpp +498 -508
- data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
- data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
- data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
- data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
- data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
- data/vendor/faiss/faiss/utils/hamming.h +62 -85
- data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
- data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
- data/vendor/faiss/faiss/utils/partitioning.h +26 -21
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
- data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
- data/vendor/faiss/faiss/utils/random.cpp +39 -63
- data/vendor/faiss/faiss/utils/random.h +13 -16
- data/vendor/faiss/faiss/utils/simdlib.h +4 -2
- data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
- data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
- data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
- data/vendor/faiss/faiss/utils/utils.cpp +304 -287
- data/vendor/faiss/faiss/utils/utils.h +54 -49
- metadata +29 -4
|
@@ -5,8 +5,6 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
// -*- c++ -*-
|
|
9
|
-
|
|
10
8
|
#ifndef FAISS_INDEX_PQ_H
|
|
11
9
|
#define FAISS_INDEX_PQ_H
|
|
12
10
|
|
|
@@ -14,68 +12,47 @@
|
|
|
14
12
|
|
|
15
13
|
#include <vector>
|
|
16
14
|
|
|
17
|
-
#include <faiss/
|
|
18
|
-
#include <faiss/impl/ProductQuantizer.h>
|
|
15
|
+
#include <faiss/IndexFlatCodes.h>
|
|
19
16
|
#include <faiss/impl/PolysemousTraining.h>
|
|
17
|
+
#include <faiss/impl/ProductQuantizer.h>
|
|
20
18
|
#include <faiss/impl/platform_macros.h>
|
|
21
19
|
|
|
22
|
-
|
|
23
20
|
namespace faiss {
|
|
24
21
|
|
|
25
|
-
|
|
26
22
|
/** Index based on a product quantizer. Stored vectors are
|
|
27
23
|
* approximated by PQ codes. */
|
|
28
|
-
struct IndexPQ:
|
|
29
|
-
|
|
24
|
+
struct IndexPQ : IndexFlatCodes {
|
|
30
25
|
/// The product quantizer used to encode the vectors
|
|
31
26
|
ProductQuantizer pq;
|
|
32
27
|
|
|
33
|
-
/// Codes. Size ntotal * pq.code_size
|
|
34
|
-
std::vector<uint8_t> codes;
|
|
35
|
-
|
|
36
28
|
/** Constructor.
|
|
37
29
|
*
|
|
38
30
|
* @param d dimensionality of the input vectors
|
|
39
31
|
* @param M number of subquantizers
|
|
40
32
|
* @param nbits number of bit per subvector index
|
|
41
33
|
*/
|
|
42
|
-
IndexPQ
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
34
|
+
IndexPQ(int d, ///< dimensionality of the input vectors
|
|
35
|
+
size_t M, ///< number of subquantizers
|
|
36
|
+
size_t nbits, ///< number of bit per subvector index
|
|
37
|
+
MetricType metric = METRIC_L2);
|
|
46
38
|
|
|
47
|
-
IndexPQ
|
|
39
|
+
IndexPQ();
|
|
48
40
|
|
|
49
41
|
void train(idx_t n, const float* x) override;
|
|
50
42
|
|
|
51
|
-
void add(idx_t n, const float* x) override;
|
|
52
|
-
|
|
53
43
|
void search(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
void reset() override;
|
|
61
|
-
|
|
62
|
-
void reconstruct_n(idx_t i0, idx_t ni, float* recons) const override;
|
|
63
|
-
|
|
64
|
-
void reconstruct(idx_t key, float* recons) const override;
|
|
65
|
-
|
|
66
|
-
size_t remove_ids(const IDSelector& sel) override;
|
|
44
|
+
idx_t n,
|
|
45
|
+
const float* x,
|
|
46
|
+
idx_t k,
|
|
47
|
+
float* distances,
|
|
48
|
+
idx_t* labels) const override;
|
|
67
49
|
|
|
68
50
|
/* The standalone codec interface */
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
void sa_encode (idx_t n, const float *x,
|
|
72
|
-
uint8_t *bytes) const override;
|
|
73
|
-
|
|
74
|
-
void sa_decode (idx_t n, const uint8_t *bytes,
|
|
75
|
-
float *x) const override;
|
|
51
|
+
void sa_encode(idx_t n, const float* x, uint8_t* bytes) const override;
|
|
76
52
|
|
|
53
|
+
void sa_decode(idx_t n, const uint8_t* bytes, float* x) const override;
|
|
77
54
|
|
|
78
|
-
DistanceComputer
|
|
55
|
+
DistanceComputer* get_distance_computer() const override;
|
|
79
56
|
|
|
80
57
|
/******************************************************
|
|
81
58
|
* Polysemous codes implementation
|
|
@@ -87,12 +64,12 @@ struct IndexPQ: Index {
|
|
|
87
64
|
|
|
88
65
|
/// how to perform the search in search_core
|
|
89
66
|
enum Search_type_t {
|
|
90
|
-
ST_PQ,
|
|
91
|
-
ST_HE,
|
|
92
|
-
ST_generalized_HE,
|
|
93
|
-
ST_SDC,
|
|
94
|
-
ST_polysemous,
|
|
95
|
-
ST_polysemous_generalize,
|
|
67
|
+
ST_PQ, ///< asymmetric product quantizer (default)
|
|
68
|
+
ST_HE, ///< Hamming distance on codes
|
|
69
|
+
ST_generalized_HE, ///< nb of same codes
|
|
70
|
+
ST_SDC, ///< symmetric product quantizer (SDC)
|
|
71
|
+
ST_polysemous, ///< HE filter (using ht) + PQ combination
|
|
72
|
+
ST_polysemous_generalize, ///< Filter on generalized Hamming
|
|
96
73
|
};
|
|
97
74
|
|
|
98
75
|
Search_type_t search_type;
|
|
@@ -105,16 +82,23 @@ struct IndexPQ: Index {
|
|
|
105
82
|
int polysemous_ht;
|
|
106
83
|
|
|
107
84
|
// actual polysemous search
|
|
108
|
-
void search_core_polysemous
|
|
109
|
-
|
|
85
|
+
void search_core_polysemous(
|
|
86
|
+
idx_t n,
|
|
87
|
+
const float* x,
|
|
88
|
+
idx_t k,
|
|
89
|
+
float* distances,
|
|
90
|
+
idx_t* labels) const;
|
|
110
91
|
|
|
111
92
|
/// prepare query for a polysemous search, but instead of
|
|
112
93
|
/// computing the result, just get the histogram of Hamming
|
|
113
94
|
/// distances. May be computed on a provided dataset if xb != NULL
|
|
114
95
|
/// @param dist_histogram (M * nbits + 1)
|
|
115
|
-
void hamming_distance_histogram
|
|
116
|
-
|
|
117
|
-
|
|
96
|
+
void hamming_distance_histogram(
|
|
97
|
+
idx_t n,
|
|
98
|
+
const float* x,
|
|
99
|
+
idx_t nb,
|
|
100
|
+
const float* xb,
|
|
101
|
+
int64_t* dist_histogram);
|
|
118
102
|
|
|
119
103
|
/** compute pairwise distances between queries and database
|
|
120
104
|
*
|
|
@@ -122,80 +106,78 @@ struct IndexPQ: Index {
|
|
|
122
106
|
* @param x query vector, size n * d
|
|
123
107
|
* @param dis output distances, size n * ntotal
|
|
124
108
|
*/
|
|
125
|
-
void hamming_distance_table
|
|
126
|
-
int32_t *dis) const;
|
|
127
|
-
|
|
109
|
+
void hamming_distance_table(idx_t n, const float* x, int32_t* dis) const;
|
|
128
110
|
};
|
|
129
111
|
|
|
130
|
-
|
|
131
112
|
/// statistics are robust to internal threading, but not if
|
|
132
113
|
/// IndexPQ::search is called by multiple threads
|
|
133
114
|
struct IndexPQStats {
|
|
134
|
-
size_t nq;
|
|
135
|
-
size_t ncode;
|
|
115
|
+
size_t nq; // nb of queries run
|
|
116
|
+
size_t ncode; // nb of codes visited
|
|
136
117
|
|
|
137
118
|
size_t n_hamming_pass; // nb of passed Hamming distance tests (for polysemy)
|
|
138
119
|
|
|
139
|
-
IndexPQStats
|
|
140
|
-
|
|
120
|
+
IndexPQStats() {
|
|
121
|
+
reset();
|
|
122
|
+
}
|
|
123
|
+
void reset();
|
|
141
124
|
};
|
|
142
125
|
|
|
143
126
|
FAISS_API extern IndexPQStats indexPQ_stats;
|
|
144
127
|
|
|
145
|
-
|
|
146
|
-
|
|
147
128
|
/** Quantizer where centroids are virtual: they are the Cartesian
|
|
148
129
|
* product of sub-centroids. */
|
|
149
|
-
struct MultiIndexQuantizer: Index
|
|
130
|
+
struct MultiIndexQuantizer : Index {
|
|
150
131
|
ProductQuantizer pq;
|
|
151
132
|
|
|
152
|
-
MultiIndexQuantizer
|
|
153
|
-
|
|
154
|
-
|
|
133
|
+
MultiIndexQuantizer(
|
|
134
|
+
int d, ///< dimension of the input vectors
|
|
135
|
+
size_t M, ///< number of subquantizers
|
|
136
|
+
size_t nbits); ///< number of bit per subvector index
|
|
155
137
|
|
|
156
138
|
void train(idx_t n, const float* x) override;
|
|
157
139
|
|
|
158
140
|
void search(
|
|
159
|
-
|
|
160
|
-
|
|
141
|
+
idx_t n,
|
|
142
|
+
const float* x,
|
|
143
|
+
idx_t k,
|
|
144
|
+
float* distances,
|
|
145
|
+
idx_t* labels) const override;
|
|
161
146
|
|
|
162
147
|
/// add and reset will crash at runtime
|
|
163
148
|
void add(idx_t n, const float* x) override;
|
|
164
149
|
void reset() override;
|
|
165
150
|
|
|
166
|
-
MultiIndexQuantizer
|
|
151
|
+
MultiIndexQuantizer() {}
|
|
167
152
|
|
|
168
153
|
void reconstruct(idx_t key, float* recons) const override;
|
|
169
154
|
};
|
|
170
155
|
|
|
171
|
-
|
|
172
156
|
/** MultiIndexQuantizer where the PQ assignmnet is performed by sub-indexes
|
|
173
157
|
*/
|
|
174
|
-
struct MultiIndexQuantizer2: MultiIndexQuantizer {
|
|
175
|
-
|
|
158
|
+
struct MultiIndexQuantizer2 : MultiIndexQuantizer {
|
|
176
159
|
/// M Indexes on d / M dimensions
|
|
177
160
|
std::vector<Index*> assign_indexes;
|
|
178
161
|
bool own_fields;
|
|
179
162
|
|
|
180
|
-
MultiIndexQuantizer2
|
|
181
|
-
int d, size_t M, size_t nbits,
|
|
182
|
-
Index **indexes);
|
|
163
|
+
MultiIndexQuantizer2(int d, size_t M, size_t nbits, Index** indexes);
|
|
183
164
|
|
|
184
|
-
MultiIndexQuantizer2
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
165
|
+
MultiIndexQuantizer2(
|
|
166
|
+
int d,
|
|
167
|
+
size_t nbits,
|
|
168
|
+
Index* assign_index_0,
|
|
169
|
+
Index* assign_index_1);
|
|
188
170
|
|
|
189
171
|
void train(idx_t n, const float* x) override;
|
|
190
172
|
|
|
191
173
|
void search(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
174
|
+
idx_t n,
|
|
175
|
+
const float* x,
|
|
176
|
+
idx_t k,
|
|
177
|
+
float* distances,
|
|
178
|
+
idx_t* labels) const override;
|
|
195
179
|
};
|
|
196
180
|
|
|
197
|
-
|
|
198
181
|
} // namespace faiss
|
|
199
182
|
|
|
200
|
-
|
|
201
183
|
#endif
|