faiss 0.6.2 → 0.6.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 +8 -0
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +3 -1
- data/vendor/faiss/faiss/Clustering.cpp +9 -1
- data/vendor/faiss/faiss/Clustering.h +8 -0
- data/vendor/faiss/faiss/IVFlib.cpp +14 -3
- data/vendor/faiss/faiss/Index.h +2 -2
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +9 -10
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +2 -3
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +24 -4
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +16 -145
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +0 -6
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +5 -9
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +8 -18
- data/vendor/faiss/faiss/IndexBinaryIVF.h +8 -1
- data/vendor/faiss/faiss/IndexEDEN.cpp +273 -0
- data/vendor/faiss/faiss/IndexEDEN.h +57 -0
- data/vendor/faiss/faiss/IndexFastScan.cpp +15 -4
- data/vendor/faiss/faiss/IndexFlat.cpp +21 -54
- data/vendor/faiss/faiss/IndexFlat.h +2 -2
- data/vendor/faiss/faiss/IndexHNSW.cpp +311 -102
- data/vendor/faiss/faiss/IndexHNSW.h +31 -7
- data/vendor/faiss/faiss/IndexIDMap.cpp +26 -8
- data/vendor/faiss/faiss/IndexIDMap.h +2 -0
- data/vendor/faiss/faiss/IndexIVF.cpp +36 -10
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +1 -1
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +3 -4
- data/vendor/faiss/faiss/IndexIVFEDEN.cpp +302 -0
- data/vendor/faiss/faiss/IndexIVFEDEN.h +70 -0
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +5 -6
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +3 -4
- data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +1 -1
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +49 -23
- data/vendor/faiss/faiss/IndexIVFPQ.h +11 -0
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +0 -1
- data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +19 -49
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +180 -76
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +5 -4
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +8 -6
- data/vendor/faiss/faiss/IndexLSH.cpp +2 -3
- data/vendor/faiss/faiss/IndexLattice.cpp +5 -0
- data/vendor/faiss/faiss/IndexNNDescent.cpp +9 -2
- data/vendor/faiss/faiss/IndexNSG.cpp +7 -2
- data/vendor/faiss/faiss/IndexPQ.cpp +6 -8
- data/vendor/faiss/faiss/IndexPreTransform.cpp +15 -0
- data/vendor/faiss/faiss/IndexRaBitQ.cpp +2 -2
- data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +1 -2
- data/vendor/faiss/faiss/IndexRaBitQFastScan.h +5 -1
- data/vendor/faiss/faiss/IndexRefine.cpp +30 -1
- data/vendor/faiss/faiss/IndexReplicas.cpp +1 -2
- data/vendor/faiss/faiss/IndexShards.cpp +5 -5
- data/vendor/faiss/faiss/IndexShardsIVF.cpp +6 -5
- data/vendor/faiss/faiss/MetaIndexes.cpp +2 -4
- data/vendor/faiss/faiss/SuperKMeans.cpp +286 -247
- data/vendor/faiss/faiss/SuperKMeans.h +33 -2
- data/vendor/faiss/faiss/VectorTransform.cpp +71 -2
- data/vendor/faiss/faiss/VectorTransform.h +3 -0
- data/vendor/faiss/faiss/clone_index.cpp +8 -0
- data/vendor/faiss/faiss/factory_tools.cpp +47 -4
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +11 -11
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +1 -5
- data/vendor/faiss/faiss/gpu/GpuDistance.h +2 -5
- data/vendor/faiss/faiss/gpu/GpuIndex.h +38 -16
- data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +71 -1
- data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +17 -0
- data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +16 -0
- data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +1 -1
- data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +2 -2
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +180 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndexIVFFlat.h +1 -5
- data/vendor/faiss/faiss/gpu_metal/MetalIndexIVFPQ.h +88 -0
- data/vendor/faiss/faiss/gpu_metal/impl/MetalIVFPQ.h +134 -0
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +1 -1
- data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +7 -4
- data/vendor/faiss/faiss/impl/DistanceComputer.h +34 -0
- data/vendor/faiss/faiss/impl/EDENQuantizer.h +119 -0
- data/vendor/faiss/faiss/impl/HNSW.cpp +528 -267
- data/vendor/faiss/faiss/impl/HNSW.h +46 -7
- data/vendor/faiss/faiss/impl/IDSelector.h +44 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +2 -2
- data/vendor/faiss/faiss/impl/NNDescent.cpp +10 -3
- data/vendor/faiss/faiss/impl/NSG.cpp +3 -1
- data/vendor/faiss/faiss/impl/Panorama.h +20 -9
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +152 -84
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +38 -26
- data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +45 -37
- data/vendor/faiss/faiss/impl/RaBitQUtils.h +35 -0
- data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +239 -72
- data/vendor/faiss/faiss/impl/RaBitQuantizer.h +66 -4
- data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.cpp +4 -13
- data/vendor/faiss/faiss/impl/ResultHandler.h +34 -34
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +287 -84
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +26 -10
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +2 -2
- data/vendor/faiss/faiss/impl/VisitedTable.cpp +22 -2
- data/vendor/faiss/faiss/impl/VisitedTable.h +20 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +90 -14
- data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +4 -4
- data/vendor/faiss/faiss/impl/expanded_scanners.h +5 -1
- data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +1 -0
- data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +35 -2
- data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +1 -1
- data/vendor/faiss/faiss/impl/index_read.cpp +491 -50
- data/vendor/faiss/faiss/impl/index_write.cpp +86 -30
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +8 -9
- data/vendor/faiss/faiss/impl/platform_macros.h +3 -1
- data/vendor/faiss/faiss/impl/polysemous_training/avx512.cpp +284 -0
- data/vendor/faiss/faiss/impl/polysemous_training/dispatch.h +115 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +73 -39
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +0 -1
- data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +26 -15
- data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +4 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +4 -4
- data/vendor/faiss/faiss/impl/result_handler/ResultHandler.cpp +195 -0
- data/vendor/faiss/faiss/impl/result_handler/avx2.cpp +133 -0
- data/vendor/faiss/faiss/impl/result_handler/avx512.cpp +281 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx2.cpp +72 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx512.cpp +228 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer.cpp +887 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +2 -2
- data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +9 -8
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +90 -24
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-impl.h +30 -30
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-spr.cpp +4 -5
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +101 -34
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +169 -13
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +125 -26
- data/vendor/faiss/faiss/impl/simd_dispatch.h +70 -31
- data/vendor/faiss/faiss/index_factory.cpp +40 -7
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +1 -1
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +9 -6
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +29 -8
- data/vendor/faiss/faiss/python/python_callbacks.cpp +3 -1
- data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +60 -0
- data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +26 -1
- data/vendor/faiss/faiss/svs/IndexSVSFlat.h +13 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +47 -5
- data/vendor/faiss/faiss/svs/IndexSVSVamana.h +23 -3
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.cpp +4 -2
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +2 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +10 -4
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +2 -1
- data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +1 -1
- data/vendor/faiss/faiss/utils/distances.cpp +30 -11
- data/vendor/faiss/faiss/utils/distances_dispatch.h +30 -24
- data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +1 -1
- data/vendor/faiss/faiss/utils/distances_simd.cpp +4 -3
- data/vendor/faiss/faiss/utils/extra_distances.cpp +4 -14
- data/vendor/faiss/faiss/utils/extra_distances.h +1 -2
- data/vendor/faiss/faiss/utils/hamming.cpp +16 -10
- data/vendor/faiss/faiss/utils/hamming.h +10 -1
- data/vendor/faiss/faiss/utils/hamming_distance/common.h +14 -3
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512_vpopcnt.cpp +24 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +1 -1
- data/vendor/faiss/faiss/utils/hamming_distance/{hamming_computer-avx512_spr.h → hamming_computer-avx512_vpopcnt.h} +85 -24
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h +141 -0
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +29 -8
- data/vendor/faiss/faiss/utils/rabitq_simd.h +202 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +194 -30
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +0 -1
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +263 -15
- data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +198 -18
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +245 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +330 -40
- data/vendor/faiss/faiss/utils/simd_impl/{rabitq_avx512_spr.cpp → rabitq_avx512_vpopcnt.cpp} +112 -23
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +11 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +143 -6
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h +2 -7
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h +6 -1
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_sve.cpp +34 -0
- data/vendor/faiss/faiss/utils/simd_levels.cpp +196 -47
- data/vendor/faiss/faiss/utils/simd_levels.h +33 -8
- data/vendor/faiss/faiss/utils/utils.cpp +9 -27
- metadata +21 -5
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512_spr.cpp +0 -15
|
@@ -21,13 +21,18 @@ enum class SIMDLevel {
|
|
|
21
21
|
// x86
|
|
22
22
|
AVX2,
|
|
23
23
|
AVX512,
|
|
24
|
-
AVX512_SPR, // Sapphire Rapids:
|
|
24
|
+
AVX512_SPR, // Sapphire Rapids: AVX512_VPOPCNT + BF16 + FP16 + VNNI
|
|
25
25
|
// arm & aarch64
|
|
26
26
|
ARM_NEON,
|
|
27
27
|
ARM_SVE, // Scalable Vector Extension (ARMv8.2+)
|
|
28
28
|
// riscv
|
|
29
29
|
RISCV_RVV, // RISC-V Vector Extension (rv64gcv)
|
|
30
30
|
|
|
31
|
+
// Appended to preserve the numeric values of the existing public enum.
|
|
32
|
+
// AVX-512 core features plus AVX512_VPOPCNTDQ and AVX512_BITALG
|
|
33
|
+
// (Ice Lake, Zen 4, etc.).
|
|
34
|
+
AVX512_VPOPCNT,
|
|
35
|
+
|
|
31
36
|
COUNT
|
|
32
37
|
};
|
|
33
38
|
|
|
@@ -52,6 +57,8 @@ inline constexpr SIMDLevel SINGLE_SIMD_LEVEL = SIMDLevel::NONE;
|
|
|
52
57
|
#else
|
|
53
58
|
#if defined(COMPILE_SIMD_AVX512_SPR)
|
|
54
59
|
inline constexpr SIMDLevel SINGLE_SIMD_LEVEL = SIMDLevel::AVX512_SPR;
|
|
60
|
+
#elif defined(COMPILE_SIMD_AVX512_VPOPCNT)
|
|
61
|
+
inline constexpr SIMDLevel SINGLE_SIMD_LEVEL = SIMDLevel::AVX512_VPOPCNT;
|
|
55
62
|
#elif defined(COMPILE_SIMD_AVX512)
|
|
56
63
|
inline constexpr SIMDLevel SINGLE_SIMD_LEVEL = SIMDLevel::AVX512;
|
|
57
64
|
#elif defined(COMPILE_SIMD_AVX2)
|
|
@@ -71,7 +78,7 @@ inline constexpr SIMDLevel SINGLE_SIMD_LEVEL = SIMDLevel::NONE;
|
|
|
71
78
|
* Helper to select the appropriate 256-bit SIMD level.
|
|
72
79
|
*
|
|
73
80
|
* For 256-bit SIMD types (simd16uint16, simd32uint8, etc.), maps:
|
|
74
|
-
* AVX512/AVX512_SPR → AVX2
|
|
81
|
+
* AVX512/AVX512_VPOPCNT/AVX512_SPR → AVX2
|
|
75
82
|
* AVX2 → AVX2
|
|
76
83
|
* ARM_NEON/ARM_SVE → ARM_NEON
|
|
77
84
|
* NONE → NONE
|
|
@@ -79,7 +86,8 @@ inline constexpr SIMDLevel SINGLE_SIMD_LEVEL = SIMDLevel::NONE;
|
|
|
79
86
|
template <SIMDLevel SL>
|
|
80
87
|
struct simd256_level_selector {
|
|
81
88
|
static constexpr SIMDLevel value =
|
|
82
|
-
(SL == SIMDLevel::AVX512 || SL == SIMDLevel::
|
|
89
|
+
(SL == SIMDLevel::AVX512 || SL == SIMDLevel::AVX512_VPOPCNT ||
|
|
90
|
+
SL == SIMDLevel::AVX512_SPR)
|
|
83
91
|
? SIMDLevel::AVX2
|
|
84
92
|
: (SL == SIMDLevel::ARM_SVE ? SIMDLevel::ARM_NEON
|
|
85
93
|
: SL == SIMDLevel::RISCV_RVV ? SIMDLevel::NONE
|
|
@@ -96,13 +104,14 @@ inline constexpr SIMDLevel SINGLE_SIMD_LEVEL_256 =
|
|
|
96
104
|
* Helper to select the appropriate 512-bit SIMD level.
|
|
97
105
|
*
|
|
98
106
|
* For 512-bit SIMD types (simd32uint16, simd64uint8, etc.), maps:
|
|
99
|
-
* AVX512_SPR → AVX512
|
|
107
|
+
* AVX512_VPOPCNT/AVX512_SPR → AVX512 for generic 512-bit operations
|
|
100
108
|
* AVX512 → AVX512
|
|
101
109
|
* NONE → NONE
|
|
102
110
|
***************************************************************/
|
|
103
111
|
template <SIMDLevel SL>
|
|
104
112
|
struct simd512_level_selector {
|
|
105
|
-
static constexpr SIMDLevel value =
|
|
113
|
+
static constexpr SIMDLevel value =
|
|
114
|
+
(SL == SIMDLevel::AVX512_SPR || SL == SIMDLevel::AVX512_VPOPCNT)
|
|
106
115
|
? SIMDLevel::AVX512
|
|
107
116
|
: (SL == SIMDLevel::RISCV_RVV) ? SIMDLevel::NONE
|
|
108
117
|
: SL;
|
|
@@ -124,14 +133,21 @@ constexpr int simd_width() {
|
|
|
124
133
|
static_assert(
|
|
125
134
|
SL != SIMDLevel::RISCV_RVV,
|
|
126
135
|
"simd_width<RISCV_RVV> is not supported: RVV is variable-width");
|
|
127
|
-
if constexpr (
|
|
136
|
+
if constexpr (
|
|
137
|
+
SL == SIMDLevel::AVX512 || SL == SIMDLevel::AVX512_VPOPCNT ||
|
|
138
|
+
SL == SIMDLevel::AVX512_SPR) {
|
|
128
139
|
return 16;
|
|
129
|
-
else if constexpr (SL == SIMDLevel::AVX2 || SL == SIMDLevel::ARM_NEON)
|
|
140
|
+
} else if constexpr (SL == SIMDLevel::AVX2 || SL == SIMDLevel::ARM_NEON) {
|
|
130
141
|
return 8;
|
|
131
|
-
else
|
|
142
|
+
} else {
|
|
132
143
|
return 1;
|
|
144
|
+
}
|
|
133
145
|
}
|
|
134
146
|
|
|
147
|
+
/// Bitmask (1 << SIMDLevel) of the levels this binary holds code for,
|
|
148
|
+
/// whether or not the CPU supports them.
|
|
149
|
+
uint64_t compiled_simd_levels();
|
|
150
|
+
|
|
135
151
|
/// Convert SIMDLevel to string. Throws FaissException for invalid level.
|
|
136
152
|
std::string to_string(SIMDLevel level);
|
|
137
153
|
|
|
@@ -161,8 +177,17 @@ struct FAISS_API SIMDConfig {
|
|
|
161
177
|
/// Returns bitmask of supported SIMD levels (1 << SIMDLevel).
|
|
162
178
|
static uint64_t supported_simd_levels;
|
|
163
179
|
|
|
180
|
+
/// CPU implements AVX-512 by splitting over a 256-bit datapath
|
|
181
|
+
/// (AMD Zen 4 / Zen 4c "Bergamo", family 0x19). On such CPUs 512-bit
|
|
182
|
+
/// ops give no throughput gain, so the fast-scan QBS path prefers the
|
|
183
|
+
/// 256-bit kernel.
|
|
184
|
+
static bool avx512_split;
|
|
185
|
+
|
|
164
186
|
static SIMDLevel auto_detect_simd_level();
|
|
165
187
|
|
|
188
|
+
/// Whether this faiss build dispatches SIMD at runtime.
|
|
189
|
+
static bool has_dynamic_dispatch();
|
|
190
|
+
|
|
166
191
|
SIMDConfig(const char** faiss_simd_level_env = nullptr);
|
|
167
192
|
|
|
168
193
|
/// Set the SIMD level. Throws FaissException if level is not supported.
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
#include <algorithm>
|
|
31
31
|
#include <set>
|
|
32
32
|
#include <type_traits>
|
|
33
|
+
#include <unordered_set>
|
|
33
34
|
#include <vector>
|
|
34
35
|
|
|
35
36
|
#include <faiss/impl/AuxIndexStructures.h>
|
|
@@ -362,39 +363,20 @@ size_t ranklist_intersection_size(
|
|
|
362
363
|
const int64_t* v2_in) {
|
|
363
364
|
if (k2 > k1)
|
|
364
365
|
return ranklist_intersection_size(k2, v2_in, k1, v1);
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
for (size_t i = 0; i < k2; i++) {
|
|
372
|
-
if (v2[i] != prev) {
|
|
373
|
-
v2[wp++] = prev = v2[i];
|
|
374
|
-
}
|
|
366
|
+
// erase-on-hit avoids double-counting; negatives are padding, not IDs
|
|
367
|
+
std::unordered_set<int64_t> remaining;
|
|
368
|
+
remaining.reserve(k2);
|
|
369
|
+
for (size_t i = 0; i < k2; i++) {
|
|
370
|
+
if (v2_in[i] >= 0) {
|
|
371
|
+
remaining.insert(v2_in[i]);
|
|
375
372
|
}
|
|
376
|
-
k2 = wp;
|
|
377
373
|
}
|
|
378
|
-
const int64_t seen_flag = int64_t{1} << 60;
|
|
379
374
|
size_t count = 0;
|
|
380
375
|
for (size_t i = 0; i < k1; i++) {
|
|
381
|
-
|
|
382
|
-
size_t i0 = 0, i1 = k2;
|
|
383
|
-
while (i0 + 1 < i1) {
|
|
384
|
-
size_t imed = (i1 + i0) / 2;
|
|
385
|
-
int64_t piv = v2[imed] & ~seen_flag;
|
|
386
|
-
if (piv <= q)
|
|
387
|
-
i0 = imed;
|
|
388
|
-
else
|
|
389
|
-
i1 = imed;
|
|
390
|
-
}
|
|
391
|
-
if (v2[i0] == q) {
|
|
376
|
+
if (remaining.erase(v1[i]) != 0) {
|
|
392
377
|
count++;
|
|
393
|
-
v2[i0] |= seen_flag;
|
|
394
378
|
}
|
|
395
379
|
}
|
|
396
|
-
delete[] v2;
|
|
397
|
-
|
|
398
380
|
return count;
|
|
399
381
|
}
|
|
400
382
|
|
|
@@ -462,7 +444,7 @@ uint64_t ivec_checksum(size_t n, const int32_t* assigned) {
|
|
|
462
444
|
uint64_t bvec_checksum(size_t n, const uint8_t* a) {
|
|
463
445
|
uint64_t cs = ivec_checksum(n / 4, (const int32_t*)a);
|
|
464
446
|
for (size_t i = n / 4 * 4; i < n; i++) {
|
|
465
|
-
cs = cs * 65713 + a[
|
|
447
|
+
cs = cs * 65713 + a[i] * 1686049;
|
|
466
448
|
}
|
|
467
449
|
return cs;
|
|
468
450
|
}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: faiss
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew Kane
|
|
@@ -85,6 +85,8 @@ files:
|
|
|
85
85
|
- vendor/faiss/faiss/IndexBinaryHash.h
|
|
86
86
|
- vendor/faiss/faiss/IndexBinaryIVF.cpp
|
|
87
87
|
- vendor/faiss/faiss/IndexBinaryIVF.h
|
|
88
|
+
- vendor/faiss/faiss/IndexEDEN.cpp
|
|
89
|
+
- vendor/faiss/faiss/IndexEDEN.h
|
|
88
90
|
- vendor/faiss/faiss/IndexFastScan.cpp
|
|
89
91
|
- vendor/faiss/faiss/IndexFastScan.h
|
|
90
92
|
- vendor/faiss/faiss/IndexFlat.cpp
|
|
@@ -101,6 +103,8 @@ files:
|
|
|
101
103
|
- vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h
|
|
102
104
|
- vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp
|
|
103
105
|
- vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h
|
|
106
|
+
- vendor/faiss/faiss/IndexIVFEDEN.cpp
|
|
107
|
+
- vendor/faiss/faiss/IndexIVFEDEN.h
|
|
104
108
|
- vendor/faiss/faiss/IndexIVFFastScan.cpp
|
|
105
109
|
- vendor/faiss/faiss/IndexIVFFastScan.h
|
|
106
110
|
- vendor/faiss/faiss/IndexIVFFlat.cpp
|
|
@@ -238,11 +242,13 @@ files:
|
|
|
238
242
|
- vendor/faiss/faiss/gpu_metal/MetalIndex.h
|
|
239
243
|
- vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h
|
|
240
244
|
- vendor/faiss/faiss/gpu_metal/MetalIndexIVFFlat.h
|
|
245
|
+
- vendor/faiss/faiss/gpu_metal/MetalIndexIVFPQ.h
|
|
241
246
|
- vendor/faiss/faiss/gpu_metal/MetalKernels.h
|
|
242
247
|
- vendor/faiss/faiss/gpu_metal/MetalPythonBridge.h
|
|
243
248
|
- vendor/faiss/faiss/gpu_metal/MetalResources.h
|
|
244
249
|
- vendor/faiss/faiss/gpu_metal/StandardMetalResources.h
|
|
245
250
|
- vendor/faiss/faiss/gpu_metal/impl/MetalIVFFlat.h
|
|
251
|
+
- vendor/faiss/faiss/gpu_metal/impl/MetalIVFPQ.h
|
|
246
252
|
- vendor/faiss/faiss/impl/AdSampling.cpp
|
|
247
253
|
- vendor/faiss/faiss/impl/AdSampling.h
|
|
248
254
|
- vendor/faiss/faiss/impl/AdditiveQuantizer.cpp
|
|
@@ -258,6 +264,7 @@ files:
|
|
|
258
264
|
- vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp
|
|
259
265
|
- vendor/faiss/faiss/impl/CodePackerRaBitQ.h
|
|
260
266
|
- vendor/faiss/faiss/impl/DistanceComputer.h
|
|
267
|
+
- vendor/faiss/faiss/impl/EDENQuantizer.h
|
|
261
268
|
- vendor/faiss/faiss/impl/FaissAssert.h
|
|
262
269
|
- vendor/faiss/faiss/impl/FaissException.cpp
|
|
263
270
|
- vendor/faiss/faiss/impl/FaissException.h
|
|
@@ -356,6 +363,8 @@ files:
|
|
|
356
363
|
- vendor/faiss/faiss/impl/mapped_io.h
|
|
357
364
|
- vendor/faiss/faiss/impl/maybe_owned_vector.h
|
|
358
365
|
- vendor/faiss/faiss/impl/platform_macros.h
|
|
366
|
+
- vendor/faiss/faiss/impl/polysemous_training/avx512.cpp
|
|
367
|
+
- vendor/faiss/faiss/impl/polysemous_training/dispatch.h
|
|
359
368
|
- vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h
|
|
360
369
|
- vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp
|
|
361
370
|
- vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h
|
|
@@ -373,6 +382,12 @@ files:
|
|
|
373
382
|
- vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp
|
|
374
383
|
- vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp
|
|
375
384
|
- vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h
|
|
385
|
+
- vendor/faiss/faiss/impl/result_handler/ResultHandler.cpp
|
|
386
|
+
- vendor/faiss/faiss/impl/result_handler/avx2.cpp
|
|
387
|
+
- vendor/faiss/faiss/impl/result_handler/avx512.cpp
|
|
388
|
+
- vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx2.cpp
|
|
389
|
+
- vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx512.cpp
|
|
390
|
+
- vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer.cpp
|
|
376
391
|
- vendor/faiss/faiss/impl/scalar_quantizer/codecs.h
|
|
377
392
|
- vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h
|
|
378
393
|
- vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h
|
|
@@ -460,10 +475,10 @@ files:
|
|
|
460
475
|
- vendor/faiss/faiss/utils/hamming_distance/common.h
|
|
461
476
|
- vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp
|
|
462
477
|
- vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp
|
|
463
|
-
- vendor/faiss/faiss/utils/hamming_distance/
|
|
478
|
+
- vendor/faiss/faiss/utils/hamming_distance/hamming_avx512_vpopcnt.cpp
|
|
464
479
|
- vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h
|
|
465
480
|
- vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h
|
|
466
|
-
- vendor/faiss/faiss/utils/hamming_distance/hamming_computer-
|
|
481
|
+
- vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512_vpopcnt.h
|
|
467
482
|
- vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h
|
|
468
483
|
- vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h
|
|
469
484
|
- vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h
|
|
@@ -498,13 +513,14 @@ files:
|
|
|
498
513
|
- vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h
|
|
499
514
|
- vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp
|
|
500
515
|
- vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp
|
|
501
|
-
- vendor/faiss/faiss/utils/simd_impl/
|
|
516
|
+
- vendor/faiss/faiss/utils/simd_impl/rabitq_avx512_vpopcnt.cpp
|
|
502
517
|
- vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp
|
|
503
518
|
- vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp
|
|
504
519
|
- vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h
|
|
505
520
|
- vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h
|
|
506
521
|
- vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp
|
|
507
522
|
- vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp
|
|
523
|
+
- vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_sve.cpp
|
|
508
524
|
- vendor/faiss/faiss/utils/simd_levels.cpp
|
|
509
525
|
- vendor/faiss/faiss/utils/simd_levels.h
|
|
510
526
|
- vendor/faiss/faiss/utils/sorting.cpp
|
|
@@ -531,7 +547,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
531
547
|
- !ruby/object:Gem::Version
|
|
532
548
|
version: '0'
|
|
533
549
|
requirements: []
|
|
534
|
-
rubygems_version: 4.0.
|
|
550
|
+
rubygems_version: 4.0.20
|
|
535
551
|
specification_version: 4
|
|
536
552
|
summary: Efficient similarity search and clustering for Ruby
|
|
537
553
|
test_files: []
|
|
@@ -1,15 +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
|
-
#ifdef COMPILE_SIMD_AVX512_SPR
|
|
9
|
-
|
|
10
|
-
#define THE_SIMD_LEVEL SIMDLevel::AVX512_SPR
|
|
11
|
-
// NOLINTNEXTLINE(facebook-hte-InlineHeader)
|
|
12
|
-
#include <faiss/utils/hamming_distance/hamming_computer-avx512_spr.h>
|
|
13
|
-
#include <faiss/utils/hamming_distance/hamming_impl.h>
|
|
14
|
-
|
|
15
|
-
#endif // COMPILE_SIMD_AVX512_SPR
|