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
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
#ifndef FAISS_INDEX_IVFPQ_H
|
|
11
11
|
#define FAISS_INDEX_IVFPQ_H
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
#include <vector>
|
|
15
14
|
|
|
16
15
|
#include <faiss/IndexIVF.h>
|
|
@@ -20,32 +19,29 @@
|
|
|
20
19
|
|
|
21
20
|
namespace faiss {
|
|
22
21
|
|
|
23
|
-
struct IVFPQSearchParameters: IVFSearchParameters {
|
|
24
|
-
size_t scan_table_threshold;
|
|
25
|
-
int polysemous_ht;
|
|
26
|
-
IVFPQSearchParameters
|
|
27
|
-
~IVFPQSearchParameters
|
|
22
|
+
struct IVFPQSearchParameters : IVFSearchParameters {
|
|
23
|
+
size_t scan_table_threshold; ///< use table computation or on-the-fly?
|
|
24
|
+
int polysemous_ht; ///< Hamming thresh for polysemous filtering
|
|
25
|
+
IVFPQSearchParameters() : scan_table_threshold(0), polysemous_ht(0) {}
|
|
26
|
+
~IVFPQSearchParameters() {}
|
|
28
27
|
};
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
29
|
FAISS_API extern size_t precomputed_table_max_bytes;
|
|
33
30
|
|
|
34
|
-
|
|
35
31
|
/** Inverted file with Product Quantizer encoding. Each residual
|
|
36
32
|
* vector is encoded as a product quantizer code.
|
|
37
33
|
*/
|
|
38
|
-
struct IndexIVFPQ: IndexIVF {
|
|
39
|
-
bool by_residual;
|
|
34
|
+
struct IndexIVFPQ : IndexIVF {
|
|
35
|
+
bool by_residual; ///< Encode residual or plain vector?
|
|
40
36
|
|
|
41
|
-
ProductQuantizer pq;
|
|
37
|
+
ProductQuantizer pq; ///< produces the codes
|
|
42
38
|
|
|
43
|
-
bool do_polysemous_training;
|
|
44
|
-
PolysemousTraining
|
|
39
|
+
bool do_polysemous_training; ///< reorder PQ centroids after training?
|
|
40
|
+
PolysemousTraining* polysemous_training; ///< if NULL, use default
|
|
45
41
|
|
|
46
42
|
// search-time parameters
|
|
47
|
-
size_t scan_table_threshold;
|
|
48
|
-
int polysemous_ht;
|
|
43
|
+
size_t scan_table_threshold; ///< use table computation or on-the-fly?
|
|
44
|
+
int polysemous_ht; ///< Hamming thresh for polysemous filtering
|
|
49
45
|
|
|
50
46
|
/** Precompute table that speed up query preprocessing at some
|
|
51
47
|
* memory cost (used only for by_residual with L2 metric)
|
|
@@ -56,37 +52,47 @@ struct IndexIVFPQ: IndexIVF {
|
|
|
56
52
|
/// size nlist * pq.M * pq.ksub
|
|
57
53
|
AlignedTable<float> precomputed_table;
|
|
58
54
|
|
|
59
|
-
IndexIVFPQ
|
|
60
|
-
Index
|
|
61
|
-
size_t
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
55
|
+
IndexIVFPQ(
|
|
56
|
+
Index* quantizer,
|
|
57
|
+
size_t d,
|
|
58
|
+
size_t nlist,
|
|
59
|
+
size_t M,
|
|
60
|
+
size_t nbits_per_idx,
|
|
61
|
+
MetricType metric = METRIC_L2);
|
|
62
|
+
|
|
63
|
+
void encode_vectors(
|
|
64
|
+
idx_t n,
|
|
65
|
+
const float* x,
|
|
66
|
+
const idx_t* list_nos,
|
|
67
|
+
uint8_t* codes,
|
|
68
|
+
bool include_listnos = false) const override;
|
|
69
|
+
|
|
70
|
+
void sa_decode(idx_t n, const uint8_t* bytes, float* x) const override;
|
|
71
|
+
|
|
72
|
+
void add_core(
|
|
73
|
+
idx_t n,
|
|
74
|
+
const float* x,
|
|
75
|
+
const idx_t* xids,
|
|
76
|
+
const idx_t* precomputed_idx) override;
|
|
74
77
|
|
|
75
78
|
/// same as add_core, also:
|
|
76
79
|
/// - output 2nd level residuals if residuals_2 != NULL
|
|
77
|
-
/// -
|
|
78
|
-
void add_core_o
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
/// - accepts precomputed_idx = nullptr
|
|
81
|
+
void add_core_o(
|
|
82
|
+
idx_t n,
|
|
83
|
+
const float* x,
|
|
84
|
+
const idx_t* xids,
|
|
85
|
+
float* residuals_2,
|
|
86
|
+
const idx_t* precomputed_idx = nullptr);
|
|
81
87
|
|
|
82
88
|
/// trains the product quantizer
|
|
83
89
|
void train_residual(idx_t n, const float* x) override;
|
|
84
90
|
|
|
85
91
|
/// same as train_residual, also output 2nd level residuals
|
|
86
|
-
void train_residual_o
|
|
92
|
+
void train_residual_o(idx_t n, const float* x, float* residuals_2);
|
|
87
93
|
|
|
88
|
-
void reconstruct_from_offset
|
|
89
|
-
|
|
94
|
+
void reconstruct_from_offset(int64_t list_no, int64_t offset, float* recons)
|
|
95
|
+
const override;
|
|
90
96
|
|
|
91
97
|
/** Find exact duplicates in the dataset.
|
|
92
98
|
*
|
|
@@ -99,10 +105,10 @@ struct IndexIVFPQ: IndexIVF {
|
|
|
99
105
|
* duplicates (max size ntotal)
|
|
100
106
|
* @return n number of groups found
|
|
101
107
|
*/
|
|
102
|
-
size_t find_duplicates
|
|
108
|
+
size_t find_duplicates(idx_t* ids, size_t* lims) const;
|
|
103
109
|
|
|
104
110
|
// map a vector to a binary code knowning the index
|
|
105
|
-
void encode
|
|
111
|
+
void encode(idx_t key, const float* x, uint8_t* code) const;
|
|
106
112
|
|
|
107
113
|
/** Encode multiple vectors
|
|
108
114
|
*
|
|
@@ -113,22 +119,27 @@ struct IndexIVFPQ: IndexIVF {
|
|
|
113
119
|
* @param compute_keys if false, assume keys are precomputed,
|
|
114
120
|
* otherwise compute them
|
|
115
121
|
*/
|
|
116
|
-
void encode_multiple
|
|
117
|
-
|
|
118
|
-
|
|
122
|
+
void encode_multiple(
|
|
123
|
+
size_t n,
|
|
124
|
+
idx_t* keys,
|
|
125
|
+
const float* x,
|
|
126
|
+
uint8_t* codes,
|
|
127
|
+
bool compute_keys = false) const;
|
|
119
128
|
|
|
120
129
|
/// inverse of encode_multiple
|
|
121
|
-
void decode_multiple
|
|
122
|
-
|
|
130
|
+
void decode_multiple(
|
|
131
|
+
size_t n,
|
|
132
|
+
const idx_t* keys,
|
|
133
|
+
const uint8_t* xcodes,
|
|
134
|
+
float* x) const;
|
|
123
135
|
|
|
124
|
-
InvertedListScanner
|
|
125
|
-
|
|
136
|
+
InvertedListScanner* get_InvertedListScanner(
|
|
137
|
+
bool store_pairs) const override;
|
|
126
138
|
|
|
127
139
|
/// build precomputed table
|
|
128
|
-
void precompute_table
|
|
129
|
-
|
|
130
|
-
IndexIVFPQ ();
|
|
140
|
+
void precompute_table();
|
|
131
141
|
|
|
142
|
+
IndexIVFPQ();
|
|
132
143
|
};
|
|
133
144
|
|
|
134
145
|
/** Pre-compute distance tables for IVFPQ with by-residual and METRIC_L2
|
|
@@ -136,24 +147,23 @@ struct IndexIVFPQ: IndexIVF {
|
|
|
136
147
|
* @param use_precomputed_table (I/O)
|
|
137
148
|
* =-1: force disable
|
|
138
149
|
* =0: decide heuristically (default: use tables only if they are
|
|
139
|
-
* < precomputed_tables_max_bytes), set use_precomputed_table on
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* @param precomputed_table precomputed table to
|
|
150
|
+
* < precomputed_tables_max_bytes), set use_precomputed_table on
|
|
151
|
+
* output =1: tables that work for all quantizers (size 256 * nlist * M) =2:
|
|
152
|
+
* specific version for MultiIndexQuantizer (much more compact)
|
|
153
|
+
* @param precomputed_table precomputed table to initialize
|
|
143
154
|
*/
|
|
144
155
|
|
|
145
156
|
void initialize_IVFPQ_precomputed_table(
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
);
|
|
157
|
+
int& use_precomputed_table,
|
|
158
|
+
const Index* quantizer,
|
|
159
|
+
const ProductQuantizer& pq,
|
|
160
|
+
AlignedTable<float>& precomputed_table,
|
|
161
|
+
bool verbose);
|
|
152
162
|
|
|
153
163
|
/// statistics are robust to internal threading, but not if
|
|
154
164
|
/// IndexIVFPQ::search_preassigned is called by multiple threads
|
|
155
165
|
struct IndexIVFPQStats {
|
|
156
|
-
size_t nrefine;
|
|
166
|
+
size_t nrefine; ///< nb of refines (IVFPQR)
|
|
157
167
|
|
|
158
168
|
size_t n_hamming_pass;
|
|
159
169
|
///< nb of passed Hamming distance tests (for polysemous)
|
|
@@ -162,17 +172,15 @@ struct IndexIVFPQStats {
|
|
|
162
172
|
size_t search_cycles;
|
|
163
173
|
size_t refine_cycles; ///< only for IVFPQR
|
|
164
174
|
|
|
165
|
-
IndexIVFPQStats
|
|
166
|
-
|
|
175
|
+
IndexIVFPQStats() {
|
|
176
|
+
reset();
|
|
177
|
+
}
|
|
178
|
+
void reset();
|
|
167
179
|
};
|
|
168
180
|
|
|
169
181
|
// global var that collects them all
|
|
170
182
|
FAISS_API extern IndexIVFPQStats indexIVFPQ_stats;
|
|
171
183
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
184
|
} // namespace faiss
|
|
176
185
|
|
|
177
|
-
|
|
178
186
|
#endif
|