faiss 0.5.2 → 0.6.0
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/ext/faiss/ext.cpp +1 -1
- data/ext/faiss/extconf.rb +5 -6
- data/ext/faiss/index_binary.cpp +76 -17
- data/ext/faiss/{index.cpp → index_rb.cpp} +108 -35
- data/ext/faiss/kmeans.cpp +12 -9
- data/ext/faiss/numo.hpp +11 -9
- data/ext/faiss/pca_matrix.cpp +10 -8
- data/ext/faiss/product_quantizer.cpp +14 -12
- data/ext/faiss/{utils.cpp → utils_rb.cpp} +10 -3
- data/ext/faiss/{utils.h → utils_rb.h} +6 -0
- data/lib/faiss/version.rb +1 -1
- data/lib/faiss.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +130 -11
- data/vendor/faiss/faiss/AutoTune.h +14 -1
- data/vendor/faiss/faiss/Clustering.cpp +59 -10
- data/vendor/faiss/faiss/Clustering.h +12 -0
- data/vendor/faiss/faiss/IVFlib.cpp +31 -28
- data/vendor/faiss/faiss/Index.cpp +20 -8
- data/vendor/faiss/faiss/Index.h +25 -3
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +19 -24
- data/vendor/faiss/faiss/IndexBinary.cpp +1 -0
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +9 -4
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +45 -11
- data/vendor/faiss/faiss/IndexFastScan.cpp +35 -22
- data/vendor/faiss/faiss/IndexFastScan.h +10 -1
- data/vendor/faiss/faiss/IndexFlat.cpp +193 -136
- data/vendor/faiss/faiss/IndexFlat.h +16 -1
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +46 -22
- data/vendor/faiss/faiss/IndexFlatCodes.h +7 -1
- data/vendor/faiss/faiss/IndexHNSW.cpp +24 -50
- data/vendor/faiss/faiss/IndexHNSW.h +14 -12
- data/vendor/faiss/faiss/IndexIDMap.cpp +1 -1
- data/vendor/faiss/faiss/IndexIVF.cpp +76 -49
- data/vendor/faiss/faiss/IndexIVF.h +14 -4
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +11 -8
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +2 -2
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +25 -14
- data/vendor/faiss/faiss/IndexIVFFastScan.h +26 -22
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +10 -61
- data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +39 -111
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +89 -147
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +37 -5
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +2 -1
- data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +42 -30
- data/vendor/faiss/faiss/IndexIVFRaBitQ.h +2 -2
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +246 -97
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +32 -29
- data/vendor/faiss/faiss/IndexLSH.cpp +8 -6
- data/vendor/faiss/faiss/IndexLattice.cpp +29 -24
- data/vendor/faiss/faiss/IndexNNDescent.cpp +1 -0
- data/vendor/faiss/faiss/IndexNSG.cpp +2 -1
- data/vendor/faiss/faiss/IndexNSG.h +0 -2
- data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +1 -1
- data/vendor/faiss/faiss/IndexPQ.cpp +19 -10
- data/vendor/faiss/faiss/IndexRaBitQ.cpp +26 -13
- data/vendor/faiss/faiss/IndexRaBitQ.h +2 -2
- data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +132 -78
- data/vendor/faiss/faiss/IndexRaBitQFastScan.h +14 -12
- data/vendor/faiss/faiss/IndexRefine.cpp +0 -30
- data/vendor/faiss/faiss/IndexShards.cpp +3 -4
- data/vendor/faiss/faiss/MetricType.h +16 -0
- data/vendor/faiss/faiss/VectorTransform.cpp +120 -0
- data/vendor/faiss/faiss/VectorTransform.h +23 -0
- data/vendor/faiss/faiss/clone_index.cpp +7 -4
- data/vendor/faiss/faiss/{cppcontrib/factory_tools.cpp → factory_tools.cpp} +1 -1
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +1 -1
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +37 -11
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +0 -28
- data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +367 -0
- data/vendor/faiss/faiss/impl/ClusteringInitialization.h +107 -0
- data/vendor/faiss/faiss/impl/CodePacker.cpp +4 -0
- data/vendor/faiss/faiss/impl/CodePacker.h +11 -3
- data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +83 -0
- data/vendor/faiss/faiss/impl/CodePackerRaBitQ.h +47 -0
- data/vendor/faiss/faiss/impl/FaissAssert.h +60 -2
- data/vendor/faiss/faiss/impl/HNSW.cpp +25 -34
- data/vendor/faiss/faiss/impl/HNSW.h +8 -6
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +34 -27
- data/vendor/faiss/faiss/impl/NNDescent.cpp +1 -1
- data/vendor/faiss/faiss/impl/NSG.cpp +6 -5
- data/vendor/faiss/faiss/impl/NSG.h +17 -7
- data/vendor/faiss/faiss/impl/Panorama.cpp +53 -46
- data/vendor/faiss/faiss/impl/Panorama.h +22 -6
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +16 -5
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +70 -58
- data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +92 -0
- data/vendor/faiss/faiss/impl/RaBitQUtils.h +93 -31
- data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +12 -28
- data/vendor/faiss/faiss/impl/RaBitQuantizer.h +3 -10
- data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.cpp +15 -41
- data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.h +0 -4
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +14 -9
- data/vendor/faiss/faiss/impl/ResultHandler.h +131 -50
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +67 -2358
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +0 -2
- data/vendor/faiss/faiss/impl/VisitedTable.cpp +42 -0
- data/vendor/faiss/faiss/impl/VisitedTable.h +69 -0
- data/vendor/faiss/faiss/impl/expanded_scanners.h +158 -0
- data/vendor/faiss/faiss/impl/index_read.cpp +829 -471
- data/vendor/faiss/faiss/impl/index_read_utils.h +0 -1
- data/vendor/faiss/faiss/impl/index_write.cpp +17 -8
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +47 -20
- data/vendor/faiss/faiss/impl/mapped_io.cpp +9 -2
- data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +7 -2
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +11 -3
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +19 -13
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +29 -21
- data/vendor/faiss/faiss/impl/{code_distance/code_distance-avx2.h → pq_code_distance/pq_code_distance-avx2.cpp} +42 -215
- data/vendor/faiss/faiss/impl/{code_distance/code_distance-avx512.h → pq_code_distance/pq_code_distance-avx512.cpp} +68 -107
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +141 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +23 -0
- data/vendor/faiss/faiss/impl/{code_distance/code_distance-sve.h → pq_code_distance/pq_code_distance-sve.cpp} +57 -144
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +9 -6
- data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +121 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +136 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +280 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +164 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +94 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +455 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +430 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +329 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +467 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +203 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +42 -0
- data/vendor/faiss/faiss/impl/simd_dispatch.h +139 -0
- data/vendor/faiss/faiss/impl/simd_result_handlers.h +18 -18
- data/vendor/faiss/faiss/index_factory.cpp +35 -16
- data/vendor/faiss/faiss/index_io.h +29 -3
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +7 -4
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +9 -19
- data/vendor/faiss/faiss/svs/IndexSVSFlat.h +2 -0
- data/vendor/faiss/faiss/svs/IndexSVSVamana.h +2 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +9 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +9 -0
- data/vendor/faiss/faiss/utils/Heap.cpp +46 -0
- data/vendor/faiss/faiss/utils/Heap.h +21 -0
- data/vendor/faiss/faiss/utils/NeuralNet.cpp +10 -7
- data/vendor/faiss/faiss/utils/distances.cpp +141 -23
- data/vendor/faiss/faiss/utils/distances.h +98 -0
- data/vendor/faiss/faiss/utils/distances_dispatch.h +170 -0
- data/vendor/faiss/faiss/utils/distances_simd.cpp +74 -3511
- data/vendor/faiss/faiss/utils/extra_distances-inl.h +164 -157
- data/vendor/faiss/faiss/utils/extra_distances.cpp +52 -95
- data/vendor/faiss/faiss/utils/extra_distances.h +47 -1
- data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +0 -1
- data/vendor/faiss/faiss/utils/partitioning.cpp +1 -1
- data/vendor/faiss/faiss/utils/pq_code_distance.h +251 -0
- data/vendor/faiss/faiss/utils/rabitq_simd.h +260 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp +150 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +568 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +153 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +1185 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +1092 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h +391 -0
- data/vendor/faiss/faiss/utils/simd_levels.cpp +322 -0
- data/vendor/faiss/faiss/utils/simd_levels.h +91 -0
- data/vendor/faiss/faiss/utils/simdlib_avx2.h +12 -1
- data/vendor/faiss/faiss/utils/simdlib_avx512.h +69 -0
- data/vendor/faiss/faiss/utils/simdlib_neon.h +6 -0
- data/vendor/faiss/faiss/utils/sorting.cpp +4 -4
- data/vendor/faiss/faiss/utils/utils.cpp +16 -9
- metadata +47 -18
- data/vendor/faiss/faiss/impl/code_distance/code_distance-generic.h +0 -81
- data/vendor/faiss/faiss/impl/code_distance/code_distance.h +0 -186
- /data/vendor/faiss/faiss/{cppcontrib/factory_tools.h → factory_tools.h} +0 -0
|
@@ -1,186 +0,0 @@
|
|
|
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
|
-
#pragma once
|
|
9
|
-
|
|
10
|
-
#include <faiss/impl/platform_macros.h>
|
|
11
|
-
|
|
12
|
-
// This directory contains functions to compute a distance
|
|
13
|
-
// from a given PQ code to a query vector, given that the
|
|
14
|
-
// distances to a query vector for pq.M codebooks are precomputed.
|
|
15
|
-
//
|
|
16
|
-
// The code was originally the part of IndexIVFPQ.cpp.
|
|
17
|
-
// The baseline implementation can be found in
|
|
18
|
-
// code_distance-generic.h, distance_single_code_generic().
|
|
19
|
-
|
|
20
|
-
// The reason for this somewhat unusual structure is that
|
|
21
|
-
// custom implementations may need to fall off to generic
|
|
22
|
-
// implementation in certain cases. So, say, avx2 header file
|
|
23
|
-
// needs to reference the generic header file. This is
|
|
24
|
-
// why the names of the functions for custom implementations
|
|
25
|
-
// have this _generic or _avx2 suffix.
|
|
26
|
-
|
|
27
|
-
#ifdef __AVX2__
|
|
28
|
-
|
|
29
|
-
#include <faiss/impl/code_distance/code_distance-avx2.h>
|
|
30
|
-
|
|
31
|
-
namespace faiss {
|
|
32
|
-
|
|
33
|
-
template <typename PQDecoderT>
|
|
34
|
-
inline float distance_single_code(
|
|
35
|
-
// number of subquantizers
|
|
36
|
-
const size_t M,
|
|
37
|
-
// number of bits per quantization index
|
|
38
|
-
const size_t nbits,
|
|
39
|
-
// precomputed distances, layout (M, ksub)
|
|
40
|
-
const float* sim_table,
|
|
41
|
-
// the code
|
|
42
|
-
const uint8_t* code) {
|
|
43
|
-
return distance_single_code_avx2<PQDecoderT>(M, nbits, sim_table, code);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
template <typename PQDecoderT>
|
|
47
|
-
inline void distance_four_codes(
|
|
48
|
-
// number of subquantizers
|
|
49
|
-
const size_t M,
|
|
50
|
-
// number of bits per quantization index
|
|
51
|
-
const size_t nbits,
|
|
52
|
-
// precomputed distances, layout (M, ksub)
|
|
53
|
-
const float* sim_table,
|
|
54
|
-
// codes
|
|
55
|
-
const uint8_t* __restrict code0,
|
|
56
|
-
const uint8_t* __restrict code1,
|
|
57
|
-
const uint8_t* __restrict code2,
|
|
58
|
-
const uint8_t* __restrict code3,
|
|
59
|
-
// computed distances
|
|
60
|
-
float& result0,
|
|
61
|
-
float& result1,
|
|
62
|
-
float& result2,
|
|
63
|
-
float& result3) {
|
|
64
|
-
distance_four_codes_avx2<PQDecoderT>(
|
|
65
|
-
M,
|
|
66
|
-
nbits,
|
|
67
|
-
sim_table,
|
|
68
|
-
code0,
|
|
69
|
-
code1,
|
|
70
|
-
code2,
|
|
71
|
-
code3,
|
|
72
|
-
result0,
|
|
73
|
-
result1,
|
|
74
|
-
result2,
|
|
75
|
-
result3);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
} // namespace faiss
|
|
79
|
-
|
|
80
|
-
#elif defined(__ARM_FEATURE_SVE)
|
|
81
|
-
|
|
82
|
-
#include <faiss/impl/code_distance/code_distance-sve.h>
|
|
83
|
-
|
|
84
|
-
namespace faiss {
|
|
85
|
-
|
|
86
|
-
template <typename PQDecoderT>
|
|
87
|
-
inline float distance_single_code(
|
|
88
|
-
// the product quantizer
|
|
89
|
-
const size_t M,
|
|
90
|
-
// number of bits per quantization index
|
|
91
|
-
const size_t nbits,
|
|
92
|
-
// precomputed distances, layout (M, ksub)
|
|
93
|
-
const float* sim_table,
|
|
94
|
-
// the code
|
|
95
|
-
const uint8_t* code) {
|
|
96
|
-
return distance_single_code_sve<PQDecoderT>(M, nbits, sim_table, code);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
template <typename PQDecoderT>
|
|
100
|
-
inline void distance_four_codes(
|
|
101
|
-
// the product quantizer
|
|
102
|
-
const size_t M,
|
|
103
|
-
// number of bits per quantization index
|
|
104
|
-
const size_t nbits,
|
|
105
|
-
// precomputed distances, layout (M, ksub)
|
|
106
|
-
const float* sim_table,
|
|
107
|
-
// codes
|
|
108
|
-
const uint8_t* __restrict code0,
|
|
109
|
-
const uint8_t* __restrict code1,
|
|
110
|
-
const uint8_t* __restrict code2,
|
|
111
|
-
const uint8_t* __restrict code3,
|
|
112
|
-
// computed distances
|
|
113
|
-
float& result0,
|
|
114
|
-
float& result1,
|
|
115
|
-
float& result2,
|
|
116
|
-
float& result3) {
|
|
117
|
-
distance_four_codes_sve<PQDecoderT>(
|
|
118
|
-
M,
|
|
119
|
-
nbits,
|
|
120
|
-
sim_table,
|
|
121
|
-
code0,
|
|
122
|
-
code1,
|
|
123
|
-
code2,
|
|
124
|
-
code3,
|
|
125
|
-
result0,
|
|
126
|
-
result1,
|
|
127
|
-
result2,
|
|
128
|
-
result3);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
} // namespace faiss
|
|
132
|
-
|
|
133
|
-
#else
|
|
134
|
-
|
|
135
|
-
#include <faiss/impl/code_distance/code_distance-generic.h>
|
|
136
|
-
|
|
137
|
-
namespace faiss {
|
|
138
|
-
|
|
139
|
-
template <typename PQDecoderT>
|
|
140
|
-
inline float distance_single_code(
|
|
141
|
-
// number of subquantizers
|
|
142
|
-
const size_t M,
|
|
143
|
-
// number of bits per quantization index
|
|
144
|
-
const size_t nbits,
|
|
145
|
-
// precomputed distances, layout (M, ksub)
|
|
146
|
-
const float* sim_table,
|
|
147
|
-
// the code
|
|
148
|
-
const uint8_t* code) {
|
|
149
|
-
return distance_single_code_generic<PQDecoderT>(M, nbits, sim_table, code);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
template <typename PQDecoderT>
|
|
153
|
-
inline void distance_four_codes(
|
|
154
|
-
// number of subquantizers
|
|
155
|
-
const size_t M,
|
|
156
|
-
// number of bits per quantization index
|
|
157
|
-
const size_t nbits,
|
|
158
|
-
// precomputed distances, layout (M, ksub)
|
|
159
|
-
const float* sim_table,
|
|
160
|
-
// codes
|
|
161
|
-
const uint8_t* __restrict code0,
|
|
162
|
-
const uint8_t* __restrict code1,
|
|
163
|
-
const uint8_t* __restrict code2,
|
|
164
|
-
const uint8_t* __restrict code3,
|
|
165
|
-
// computed distances
|
|
166
|
-
float& result0,
|
|
167
|
-
float& result1,
|
|
168
|
-
float& result2,
|
|
169
|
-
float& result3) {
|
|
170
|
-
distance_four_codes_generic<PQDecoderT>(
|
|
171
|
-
M,
|
|
172
|
-
nbits,
|
|
173
|
-
sim_table,
|
|
174
|
-
code0,
|
|
175
|
-
code1,
|
|
176
|
-
code2,
|
|
177
|
-
code3,
|
|
178
|
-
result0,
|
|
179
|
-
result1,
|
|
180
|
-
result2,
|
|
181
|
-
result3);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
} // namespace faiss
|
|
185
|
-
|
|
186
|
-
#endif
|
|
File without changes
|