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
|
@@ -21,26 +21,25 @@ namespace faiss {
|
|
|
21
21
|
|
|
22
22
|
/** Product Quantizer. Implemented only for METRIC_L2 */
|
|
23
23
|
struct ProductQuantizer {
|
|
24
|
-
|
|
25
24
|
using idx_t = Index::idx_t;
|
|
26
25
|
|
|
27
|
-
size_t d;
|
|
28
|
-
size_t M;
|
|
29
|
-
size_t nbits;
|
|
26
|
+
size_t d; ///< size of the input vectors
|
|
27
|
+
size_t M; ///< number of subquantizers
|
|
28
|
+
size_t nbits; ///< number of bits per quantization index
|
|
30
29
|
|
|
31
30
|
// values derived from the above
|
|
32
|
-
size_t dsub;
|
|
33
|
-
size_t code_size;
|
|
34
|
-
size_t ksub;
|
|
35
|
-
bool verbose;
|
|
31
|
+
size_t dsub; ///< dimensionality of each subvector
|
|
32
|
+
size_t code_size; ///< bytes per indexed vector
|
|
33
|
+
size_t ksub; ///< number of centroids for each subquantizer
|
|
34
|
+
bool verbose; ///< verbose during training?
|
|
36
35
|
|
|
37
36
|
/// initialization
|
|
38
37
|
enum train_type_t {
|
|
39
38
|
Train_default,
|
|
40
|
-
Train_hot_start,
|
|
41
|
-
Train_shared,
|
|
42
|
-
Train_hypercube,
|
|
43
|
-
Train_hypercube_pca,
|
|
39
|
+
Train_hot_start, ///< the centroids are already initialized
|
|
40
|
+
Train_shared, ///< share dictionary accross PQ segments
|
|
41
|
+
Train_hypercube, ///< intialize centroids with nbits-D hypercube
|
|
42
|
+
Train_hypercube_pca, ///< intialize centroids with nbits-D hypercube
|
|
44
43
|
};
|
|
45
44
|
train_type_t train_type;
|
|
46
45
|
|
|
@@ -48,59 +47,57 @@ struct ProductQuantizer {
|
|
|
48
47
|
|
|
49
48
|
/// if non-NULL, use this index for assignment (should be of size
|
|
50
49
|
/// d / M)
|
|
51
|
-
Index
|
|
50
|
+
Index* assign_index;
|
|
52
51
|
|
|
53
52
|
/// Centroid table, size M * ksub * dsub
|
|
54
53
|
std::vector<float> centroids;
|
|
55
54
|
|
|
56
55
|
/// return the centroids associated with subvector m
|
|
57
|
-
float
|
|
58
|
-
return ¢roids
|
|
56
|
+
float* get_centroids(size_t m, size_t i) {
|
|
57
|
+
return ¢roids[(m * ksub + i) * dsub];
|
|
59
58
|
}
|
|
60
|
-
const float
|
|
61
|
-
return ¢roids
|
|
59
|
+
const float* get_centroids(size_t m, size_t i) const {
|
|
60
|
+
return ¢roids[(m * ksub + i) * dsub];
|
|
62
61
|
}
|
|
63
62
|
|
|
64
63
|
// Train the product quantizer on a set of points. A clustering
|
|
65
64
|
// can be set on input to define non-default clustering parameters
|
|
66
|
-
void train
|
|
65
|
+
void train(int n, const float* x);
|
|
67
66
|
|
|
68
|
-
ProductQuantizer(
|
|
69
|
-
size_t
|
|
70
|
-
size_t
|
|
67
|
+
ProductQuantizer(
|
|
68
|
+
size_t d, /* dimensionality of the input vectors */
|
|
69
|
+
size_t M, /* number of subquantizers */
|
|
70
|
+
size_t nbits); /* number of bit per subvector index */
|
|
71
71
|
|
|
72
|
-
ProductQuantizer
|
|
72
|
+
ProductQuantizer();
|
|
73
73
|
|
|
74
74
|
/// compute derived values when d, M and nbits have been set
|
|
75
|
-
void set_derived_values
|
|
75
|
+
void set_derived_values();
|
|
76
76
|
|
|
77
77
|
/// Define the centroids for subquantizer m
|
|
78
|
-
void set_params
|
|
78
|
+
void set_params(const float* centroids, int m);
|
|
79
79
|
|
|
80
80
|
/// Quantize one vector with the product quantizer
|
|
81
|
-
void compute_code
|
|
81
|
+
void compute_code(const float* x, uint8_t* code) const;
|
|
82
82
|
|
|
83
83
|
/// same as compute_code for several vectors
|
|
84
|
-
void compute_codes
|
|
85
|
-
uint8_t * codes,
|
|
86
|
-
size_t n) const ;
|
|
84
|
+
void compute_codes(const float* x, uint8_t* codes, size_t n) const;
|
|
87
85
|
|
|
88
86
|
/// speed up code assignment using assign_index
|
|
89
87
|
/// (non-const because the index is changed)
|
|
90
|
-
void compute_codes_with_assign_index
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
void compute_codes_with_assign_index(
|
|
89
|
+
const float* x,
|
|
90
|
+
uint8_t* codes,
|
|
91
|
+
size_t n);
|
|
94
92
|
|
|
95
93
|
/// decode a vector from a given code (or n vectors if third argument)
|
|
96
|
-
void decode
|
|
97
|
-
void decode
|
|
94
|
+
void decode(const uint8_t* code, float* x) const;
|
|
95
|
+
void decode(const uint8_t* code, float* x, size_t n) const;
|
|
98
96
|
|
|
99
97
|
/// If we happen to have the distance tables precomputed, this is
|
|
100
98
|
/// more efficient to compute the codes.
|
|
101
|
-
void compute_code_from_distance_table
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
void compute_code_from_distance_table(const float* tab, uint8_t* code)
|
|
100
|
+
const;
|
|
104
101
|
|
|
105
102
|
/** Compute distance table for one vector.
|
|
106
103
|
*
|
|
@@ -115,26 +112,20 @@ struct ProductQuantizer {
|
|
|
115
112
|
* @param x input vector size d
|
|
116
113
|
* @param dis_table output table, size M * ksub
|
|
117
114
|
*/
|
|
118
|
-
void compute_distance_table
|
|
119
|
-
float * dis_table) const;
|
|
120
|
-
|
|
121
|
-
void compute_inner_prod_table (const float * x,
|
|
122
|
-
float * dis_table) const;
|
|
115
|
+
void compute_distance_table(const float* x, float* dis_table) const;
|
|
123
116
|
|
|
117
|
+
void compute_inner_prod_table(const float* x, float* dis_table) const;
|
|
124
118
|
|
|
125
119
|
/** compute distance table for several vectors
|
|
126
120
|
* @param nx nb of input vectors
|
|
127
121
|
* @param x input vector size nx * d
|
|
128
122
|
* @param dis_table output table, size nx * M * ksub
|
|
129
123
|
*/
|
|
130
|
-
void compute_distance_tables
|
|
131
|
-
|
|
132
|
-
float * dis_tables) const;
|
|
133
|
-
|
|
134
|
-
void compute_inner_prod_tables (size_t nx,
|
|
135
|
-
const float * x,
|
|
136
|
-
float * dis_tables) const;
|
|
124
|
+
void compute_distance_tables(size_t nx, const float* x, float* dis_tables)
|
|
125
|
+
const;
|
|
137
126
|
|
|
127
|
+
void compute_inner_prod_tables(size_t nx, const float* x, float* dis_tables)
|
|
128
|
+
const;
|
|
138
129
|
|
|
139
130
|
/** perform a search (L2 distance)
|
|
140
131
|
* @param x query vectors, size nx * d
|
|
@@ -144,95 +135,93 @@ struct ProductQuantizer {
|
|
|
144
135
|
* @param res heap array to store results (nh == nx)
|
|
145
136
|
* @param init_finalize_heap initialize heap (input) and sort (output)?
|
|
146
137
|
*/
|
|
147
|
-
void search
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
138
|
+
void search(
|
|
139
|
+
const float* x,
|
|
140
|
+
size_t nx,
|
|
141
|
+
const uint8_t* codes,
|
|
142
|
+
const size_t ncodes,
|
|
143
|
+
float_maxheap_array_t* res,
|
|
144
|
+
bool init_finalize_heap = true) const;
|
|
153
145
|
|
|
154
146
|
/** same as search, but with inner product similarity */
|
|
155
|
-
void search_ip
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
147
|
+
void search_ip(
|
|
148
|
+
const float* x,
|
|
149
|
+
size_t nx,
|
|
150
|
+
const uint8_t* codes,
|
|
151
|
+
const size_t ncodes,
|
|
152
|
+
float_minheap_array_t* res,
|
|
153
|
+
bool init_finalize_heap = true) const;
|
|
162
154
|
|
|
163
155
|
/// Symmetric Distance Table
|
|
164
156
|
std::vector<float> sdc_table;
|
|
165
157
|
|
|
166
158
|
// intitialize the SDC table from the centroids
|
|
167
|
-
void compute_sdc_table
|
|
168
|
-
|
|
169
|
-
void search_sdc
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
159
|
+
void compute_sdc_table();
|
|
160
|
+
|
|
161
|
+
void search_sdc(
|
|
162
|
+
const uint8_t* qcodes,
|
|
163
|
+
size_t nq,
|
|
164
|
+
const uint8_t* bcodes,
|
|
165
|
+
const size_t ncodes,
|
|
166
|
+
float_maxheap_array_t* res,
|
|
167
|
+
bool init_finalize_heap = true) const;
|
|
176
168
|
};
|
|
177
169
|
|
|
178
|
-
|
|
179
170
|
/*************************************************
|
|
180
171
|
* Objects to encode / decode strings of bits
|
|
181
172
|
*************************************************/
|
|
182
173
|
|
|
183
174
|
struct PQEncoderGeneric {
|
|
184
|
-
uint8_t
|
|
175
|
+
uint8_t* code; ///< code for this vector
|
|
185
176
|
uint8_t offset;
|
|
186
177
|
const int nbits; ///< number of bits per subquantizer index
|
|
187
178
|
|
|
188
179
|
uint8_t reg;
|
|
189
180
|
|
|
190
|
-
PQEncoderGeneric(uint8_t
|
|
181
|
+
PQEncoderGeneric(uint8_t* code, int nbits, uint8_t offset = 0);
|
|
191
182
|
|
|
192
183
|
void encode(uint64_t x);
|
|
193
184
|
|
|
194
185
|
~PQEncoderGeneric();
|
|
195
186
|
};
|
|
196
187
|
|
|
197
|
-
|
|
198
188
|
struct PQEncoder8 {
|
|
199
|
-
uint8_t
|
|
200
|
-
PQEncoder8(uint8_t
|
|
189
|
+
uint8_t* code;
|
|
190
|
+
PQEncoder8(uint8_t* code, int nbits);
|
|
201
191
|
void encode(uint64_t x);
|
|
202
192
|
};
|
|
203
193
|
|
|
204
194
|
struct PQEncoder16 {
|
|
205
|
-
uint16_t
|
|
206
|
-
PQEncoder16(uint8_t
|
|
195
|
+
uint16_t* code;
|
|
196
|
+
PQEncoder16(uint8_t* code, int nbits);
|
|
207
197
|
void encode(uint64_t x);
|
|
208
198
|
};
|
|
209
199
|
|
|
210
|
-
|
|
211
200
|
struct PQDecoderGeneric {
|
|
212
|
-
const uint8_t
|
|
201
|
+
const uint8_t* code;
|
|
213
202
|
uint8_t offset;
|
|
214
203
|
const int nbits;
|
|
215
204
|
const uint64_t mask;
|
|
216
205
|
uint8_t reg;
|
|
217
|
-
PQDecoderGeneric(const uint8_t
|
|
206
|
+
PQDecoderGeneric(const uint8_t* code, int nbits);
|
|
218
207
|
uint64_t decode();
|
|
219
208
|
};
|
|
220
209
|
|
|
221
210
|
struct PQDecoder8 {
|
|
222
211
|
static const int nbits = 8;
|
|
223
|
-
const uint8_t
|
|
224
|
-
PQDecoder8(const uint8_t
|
|
212
|
+
const uint8_t* code;
|
|
213
|
+
PQDecoder8(const uint8_t* code, int nbits);
|
|
225
214
|
uint64_t decode();
|
|
226
215
|
};
|
|
227
216
|
|
|
228
217
|
struct PQDecoder16 {
|
|
229
218
|
static const int nbits = 16;
|
|
230
|
-
const uint16_t
|
|
231
|
-
PQDecoder16(const uint8_t
|
|
219
|
+
const uint16_t* code;
|
|
220
|
+
PQDecoder16(const uint8_t* code, int nbits);
|
|
232
221
|
uint64_t decode();
|
|
233
222
|
};
|
|
234
223
|
|
|
235
|
-
}
|
|
224
|
+
} // namespace faiss
|
|
236
225
|
|
|
237
226
|
#include <faiss/impl/ProductQuantizer-inl.h>
|
|
238
227
|
|