faiss 0.6.4 → 0.6.5
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 +4 -0
- data/ext/faiss/extconf.rb +1 -1
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +175 -0
- data/vendor/faiss/faiss/Clustering.cpp +150 -60
- data/vendor/faiss/faiss/Clustering.h +29 -0
- data/vendor/faiss/faiss/IVFlib.cpp +99 -0
- data/vendor/faiss/faiss/IVFlib.h +15 -0
- data/vendor/faiss/faiss/Index.cpp +44 -0
- data/vendor/faiss/faiss/Index.h +19 -14
- data/vendor/faiss/faiss/IndexBinary.cpp +8 -0
- data/vendor/faiss/faiss/IndexBinary.h +8 -0
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +82 -4
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +19 -0
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +34 -0
- data/vendor/faiss/faiss/IndexFastScan.cpp +33 -17
- data/vendor/faiss/faiss/IndexFastScan.h +6 -3
- data/vendor/faiss/faiss/IndexFlat.cpp +56 -0
- data/vendor/faiss/faiss/IndexFlat.h +31 -0
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +6 -1
- data/vendor/faiss/faiss/IndexHNSW.cpp +456 -10
- data/vendor/faiss/faiss/IndexHNSW.h +38 -0
- data/vendor/faiss/faiss/IndexIDMap.cpp +32 -0
- data/vendor/faiss/faiss/IndexIDMap.h +7 -0
- data/vendor/faiss/faiss/IndexIVF.cpp +281 -31
- data/vendor/faiss/faiss/IndexIVF.h +53 -1
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +46 -14
- data/vendor/faiss/faiss/IndexIVFFastScan.h +4 -2
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +33 -0
- data/vendor/faiss/faiss/IndexIVFFlat.h +16 -0
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +1 -0
- data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +3 -20
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +50 -14
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +5 -2
- data/vendor/faiss/faiss/IndexIVFSQFastScan.cpp +855 -0
- data/vendor/faiss/faiss/IndexIVFSQFastScan.h +145 -0
- data/vendor/faiss/faiss/IndexNNDescent.cpp +0 -3
- data/vendor/faiss/faiss/IndexPiPNN.cpp +201 -0
- data/vendor/faiss/faiss/IndexPiPNN.h +83 -0
- data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +6 -3
- data/vendor/faiss/faiss/IndexRaBitQFastScan.h +10 -4
- data/vendor/faiss/faiss/IndexReplicas.cpp +20 -0
- data/vendor/faiss/faiss/IndexReplicas.h +9 -0
- data/vendor/faiss/faiss/IndexSQFastScan.cpp +648 -0
- data/vendor/faiss/faiss/IndexSQFastScan.h +129 -0
- data/vendor/faiss/faiss/IndexShards.cpp +10 -0
- data/vendor/faiss/faiss/IndexShards.h +5 -0
- data/vendor/faiss/faiss/SuperKMeans.cpp +57 -15
- data/vendor/faiss/faiss/SuperKMeans.h +9 -4
- data/vendor/faiss/faiss/VectorTransform.cpp +3 -2
- data/vendor/faiss/faiss/clone_index.cpp +24 -0
- data/vendor/faiss/faiss/gpu/Dataset.h +112 -0
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +16 -13
- data/vendor/faiss/faiss/gpu/GpuCloner.h +4 -0
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +3 -0
- data/vendor/faiss/faiss/gpu/GpuIndex.h +4 -13
- data/vendor/faiss/faiss/gpu/GpuIndexBinaryCagra.h +26 -13
- data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +45 -22
- data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +11 -0
- data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +6 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuDatasetHeader.cpp +18 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +215 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +98 -0
- data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +11 -0
- data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +1 -1
- data/vendor/faiss/faiss/gpu_metal/MetalCloner.h +11 -0
- data/vendor/faiss/faiss/gpu_metal/MetalDistance.h +92 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +4 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndexBinaryFlat.h +69 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndexIVFPQ.h +38 -0
- data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +106 -0
- data/vendor/faiss/faiss/gpu_metal/MetalPythonBridge.h +10 -0
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +2 -0
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +1 -6
- data/vendor/faiss/faiss/impl/ClusteringHelpers.cpp +134 -45
- data/vendor/faiss/faiss/impl/ClusteringHelpers.h +36 -0
- data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +286 -136
- data/vendor/faiss/faiss/impl/DistanceComputer.cpp +63 -0
- data/vendor/faiss/faiss/impl/DistanceComputer.h +3 -29
- data/vendor/faiss/faiss/impl/HNSW.cpp +46 -10
- data/vendor/faiss/faiss/impl/HNSW.h +72 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +6 -19
- data/vendor/faiss/faiss/impl/NNDescent.cpp +2 -1
- data/vendor/faiss/faiss/impl/NSG.cpp +3 -2
- data/vendor/faiss/faiss/impl/Panorama.h +3 -2
- data/vendor/faiss/faiss/impl/PiPNN.cpp +822 -0
- data/vendor/faiss/faiss/impl/PiPNN.h +122 -0
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +54 -11
- data/vendor/faiss/faiss/impl/RaBitQUtils.h +1 -1
- data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +81 -57
- data/vendor/faiss/faiss/impl/RaBitQuantizer.h +15 -0
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +29 -0
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +1 -6
- data/vendor/faiss/faiss/impl/approx_topk/avx2.cpp +0 -4
- data/vendor/faiss/faiss/impl/approx_topk/neon.cpp +0 -4
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h +5 -2
- data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +0 -4
- data/vendor/faiss/faiss/impl/binary_hamming/avx512.cpp +0 -4
- data/vendor/faiss/faiss/impl/binary_hamming/neon.cpp +0 -4
- data/vendor/faiss/faiss/impl/binary_hamming/rvv.cpp +0 -4
- data/vendor/faiss/faiss/impl/expanded_scanners.h +88 -0
- data/vendor/faiss/faiss/impl/fast_scan/FastScanDistancePostProcessing.h +4 -0
- data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h +61 -64
- data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h +13 -14
- data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +17 -129
- data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +25 -19
- data/vendor/faiss/faiss/impl/fast_scan/fast_scan.cpp +5 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp +0 -4
- data/vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp +0 -4
- data/vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp +0 -88
- data/vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp +0 -4
- data/vendor/faiss/faiss/impl/fast_scan/kernels_neon.h +155 -0
- data/vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h +22 -1
- data/vendor/faiss/faiss/impl/fast_scan/kernels_simd512.h +3 -2
- data/vendor/faiss/faiss/impl/fast_scan/simd_result_handlers.h +41 -23
- data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +0 -4
- data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +0 -4
- data/vendor/faiss/faiss/impl/index_read.cpp +172 -0
- data/vendor/faiss/faiss/impl/index_write.cpp +95 -0
- data/vendor/faiss/faiss/impl/pipnn/HashPrune.cpp +159 -0
- data/vendor/faiss/faiss/impl/pipnn/HashPrune.h +69 -0
- data/vendor/faiss/faiss/impl/pipnn/Partition.cpp +587 -0
- data/vendor/faiss/faiss/impl/pipnn/Partition.h +93 -0
- data/vendor/faiss/faiss/impl/pipnn/kernels.cpp +326 -0
- data/vendor/faiss/faiss/impl/pipnn/kernels.h +92 -0
- data/vendor/faiss/faiss/impl/platform_macros.h +45 -0
- data/vendor/faiss/faiss/impl/polysemous_training/avx512.cpp +0 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +79 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +6 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +0 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +0 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +0 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx2.h +4 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx512.h +4 -1
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +19 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h +6 -6
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +131 -6
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp +0 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_rvv_kernel.h +89 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_scan_impl.h +21 -10
- data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +45 -18
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +2 -1
- data/vendor/faiss/faiss/impl/result_handler/avx2.cpp +0 -4
- data/vendor/faiss/faiss/impl/result_handler/avx512.cpp +0 -4
- data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx2.cpp +0 -4
- data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx512.cpp +0 -4
- data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +5 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +28 -52
- data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +59 -11
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +226 -77
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-impl.h +482 -103
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-spr.cpp +2 -149
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +3 -698
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +66 -57
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +101 -96
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +3185 -144
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq8_coefficients.h +48 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq8_rvv_kernel.h +546 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +2 -2
- data/vendor/faiss/faiss/impl/simd_dispatch.h +7 -0
- data/vendor/faiss/faiss/impl/simdlib/simdlib_avx2.h +14 -0
- data/vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h +7 -8
- data/vendor/faiss/faiss/impl/sq_fastscan_utils.h +232 -0
- data/vendor/faiss/faiss/index_factory.cpp +76 -0
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +3 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamana.h +3 -2
- data/vendor/faiss/faiss/utils/AlignedTable.h +6 -1
- data/vendor/faiss/faiss/utils/Heap.cpp +4 -3
- data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +16 -5
- data/vendor/faiss/faiss/utils/bf16.h +36 -0
- data/vendor/faiss/faiss/utils/distances.cpp +226 -15
- data/vendor/faiss/faiss/utils/distances.h +34 -0
- data/vendor/faiss/faiss/utils/distances_dispatch.h +6 -4
- data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +2 -5
- data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +0 -14
- data/vendor/faiss/faiss/utils/distances_fused/rvv.cpp +25 -0
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +0 -4
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp +0 -4
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h +2 -1
- data/vendor/faiss/faiss/utils/distances_simd.cpp +9 -0
- data/vendor/faiss/faiss/utils/fp16-fp16c.h +4 -0
- data/vendor/faiss/faiss/utils/fp16-inl.h +26 -52
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +0 -4
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp +0 -4
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512_vpopcnt.cpp +0 -4
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +33 -5
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512_vpopcnt.h +15 -30
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h +0 -4
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h +2 -1
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp +0 -4
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp +0 -4
- data/vendor/faiss/faiss/utils/pq_code_distance.h +8 -4
- data/vendor/faiss/faiss/utils/prefetch.h +1 -26
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +26 -27
- data/vendor/faiss/faiss/utils/quantize_lut.h +11 -0
- data/vendor/faiss/faiss/utils/rabitq_simd.h +51 -16
- data/vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp +9 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +37 -5
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +64 -5
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +64 -5
- data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +353 -71
- data/vendor/faiss/faiss/utils/simd_impl/distances_rvv_kernel.h +68 -0
- data/vendor/faiss/faiss/utils/simd_impl/exhaustive_L2sqr_blas_cmax.h +93 -0
- data/vendor/faiss/faiss/utils/simd_impl/fp16_kernels.h +76 -0
- data/vendor/faiss/faiss/utils/simd_impl/fp16_kernels_avx2.cpp +52 -0
- data/vendor/faiss/faiss/utils/simd_impl/fp16_kernels_avx512.cpp +52 -0
- data/vendor/faiss/faiss/utils/simd_impl/fp16_kernels_neon.cpp +48 -0
- data/vendor/faiss/faiss/utils/simd_impl/masked_sum-avx2.h +44 -0
- data/vendor/faiss/faiss/utils/simd_impl/masked_sum-avx512.h +43 -0
- data/vendor/faiss/faiss/utils/simd_impl/masked_sum.h +38 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp +0 -4
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp +0 -4
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +54 -15
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +38 -21
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512_vpopcnt.cpp +51 -14
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +297 -10
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +0 -4
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp +0 -4
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp +0 -4
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_sve.cpp +0 -4
- data/vendor/faiss/faiss/utils/simd_levels.cpp +19 -3
- data/vendor/faiss/faiss/utils/simd_levels.h +74 -1
- data/vendor/faiss/faiss/utils/transpose/transpose-avx2-inl.h +0 -4
- data/vendor/faiss/faiss/utils/transpose/transpose-avx512-inl.h +0 -4
- data/vendor/faiss/faiss/utils/utils.cpp +80 -0
- data/vendor/faiss/faiss/utils/utils.h +24 -0
- metadata +33 -1
|
@@ -30,6 +30,8 @@ uint64_t SIMDConfig::supported_simd_levels = 0;
|
|
|
30
30
|
// Microarchitecture flags (x86). Default false; set by
|
|
31
31
|
// detect_x86_uarch_flags() at load time.
|
|
32
32
|
bool SIMDConfig::avx512_split = false;
|
|
33
|
+
bool SIMDConfig::scalar_gather = false;
|
|
34
|
+
bool SIMDConfig::sq_avx512_4_accumulators = false;
|
|
33
35
|
|
|
34
36
|
// Resolved here rather than in the header so that dependents, which never see
|
|
35
37
|
// FAISS_ENABLE_DD, still get the answer for the faiss they link against.
|
|
@@ -137,6 +139,13 @@ void detect_x86_uarch_flags() {
|
|
|
137
139
|
// AMD Zen 4 / Zen 4c (Bergamo) is family 0x19 and splits AVX-512.
|
|
138
140
|
// (Zen 5, family 0x1A, has a native 512-bit datapath and is excluded.)
|
|
139
141
|
SIMDConfig::avx512_split = is_amd && display_family == 0x19u;
|
|
142
|
+
// Measured on Milan, Bergamo (0x19) and Turin (0x1A); other AMD families
|
|
143
|
+
// keep the gather kernels.
|
|
144
|
+
SIMDConfig::scalar_gather =
|
|
145
|
+
is_amd && (display_family == 0x19u || display_family == 0x1Au);
|
|
146
|
+
// Measured on Bergamo (0x19) and Turin (0x1A). Intel Skylake and Sapphire
|
|
147
|
+
// Rapids are faster with one accumulator.
|
|
148
|
+
SIMDConfig::sq_avx512_4_accumulators = SIMDConfig::scalar_gather;
|
|
140
149
|
}
|
|
141
150
|
|
|
142
151
|
#else // Not x86-64
|
|
@@ -191,6 +200,8 @@ SIMDConfig::SIMDConfig(const char** faiss_simd_level_env) {
|
|
|
191
200
|
if (!env_var) {
|
|
192
201
|
level = auto_detect_simd_level();
|
|
193
202
|
} else {
|
|
203
|
+
// The microarchitecture flags describe the CPU, not the forced level.
|
|
204
|
+
detect_x86_uarch_flags();
|
|
194
205
|
// Forcing a level the CPU lacks is allowed. Forcing one the binary
|
|
195
206
|
// does not hold is not: dispatch would fall to NONE and skip every
|
|
196
207
|
// level between. Walk down to the nearest compiled level instead.
|
|
@@ -274,7 +285,9 @@ SIMDLevel SIMDConfig::auto_detect_simd_level() {
|
|
|
274
285
|
|
|
275
286
|
#if defined(COMPILE_SIMD_AVX2) || defined(COMPILE_SIMD_AVX512)
|
|
276
287
|
bool has_avx2 = (ebx7 & (1 << 5)) != 0;
|
|
277
|
-
|
|
288
|
+
// The AVX2 and higher SIMD files compile with -mbmi2.
|
|
289
|
+
bool has_bmi2 = (ebx7 & (1 << 8)) != 0;
|
|
290
|
+
if (has_avx2 && has_bmi2) {
|
|
278
291
|
supported_simd_levels |= (1 << static_cast<int>(SIMDLevel::AVX2));
|
|
279
292
|
detected_level = SIMDLevel::AVX2;
|
|
280
293
|
}
|
|
@@ -282,7 +295,7 @@ SIMDLevel SIMDConfig::auto_detect_simd_level() {
|
|
|
282
295
|
#if defined(COMPILE_SIMD_AVX512)
|
|
283
296
|
bool cpu_has_avx512f = (ebx7 & (1 << 16)) != 0;
|
|
284
297
|
bool os_supports_avx512 = (xcr0 & 0xE0) == 0xE0;
|
|
285
|
-
bool has_avx512f = cpu_has_avx512f && os_supports_avx512;
|
|
298
|
+
bool has_avx512f = cpu_has_avx512f && os_supports_avx512 && has_bmi2;
|
|
286
299
|
if (has_avx512f) {
|
|
287
300
|
bool has_avx512cd = (ebx7 & (1 << 28)) != 0;
|
|
288
301
|
bool has_avx512vl = (ebx7 & (1 << 31)) != 0;
|
|
@@ -342,7 +355,10 @@ SIMDLevel SIMDConfig::auto_detect_simd_level() {
|
|
|
342
355
|
#endif
|
|
343
356
|
|
|
344
357
|
#if defined(__riscv) && defined(COMPILE_SIMD_RISCV_RVV)
|
|
345
|
-
// RVV is always available on RISC-V builds compiled with
|
|
358
|
+
// RVV is always available on RISC-V builds compiled with
|
|
359
|
+
// rv64gcv_zvfhmin: that ISA (including Zvfhmin, used by the QT_fp16
|
|
360
|
+
// kernels) is the minimum requirement to run such binaries at all,
|
|
361
|
+
// so no runtime feature check is needed beyond the build contract.
|
|
346
362
|
supported_simd_levels |= (1 << static_cast<int>(SIMDLevel::RISCV_RVV));
|
|
347
363
|
detected_level = SIMDLevel::RISCV_RVV;
|
|
348
364
|
#endif
|
|
@@ -26,7 +26,11 @@ enum class SIMDLevel {
|
|
|
26
26
|
ARM_NEON,
|
|
27
27
|
ARM_SVE, // Scalable Vector Extension (ARMv8.2+)
|
|
28
28
|
// riscv
|
|
29
|
-
|
|
29
|
+
// RISC-V Vector Extension. The minimum ISA for this level is rv64gcv
|
|
30
|
+
// plus Zvfhmin (FP16 vector conversion), which the QT_fp16 kernels
|
|
31
|
+
// require; RVV translation units are compiled with
|
|
32
|
+
// -march=rv64gcv_zvfhmin.
|
|
33
|
+
RISCV_RVV,
|
|
30
34
|
|
|
31
35
|
// Appended to preserve the numeric values of the existing public enum.
|
|
32
36
|
// AVX-512 core features plus AVX512_VPOPCNTDQ and AVX512_BITALG
|
|
@@ -36,6 +40,65 @@ enum class SIMDLevel {
|
|
|
36
40
|
COUNT
|
|
37
41
|
};
|
|
38
42
|
|
|
43
|
+
/***************************************************************
|
|
44
|
+
* FAISS_SIMD_TU(L): 1 if the library contains SIMD level L
|
|
45
|
+
* (COMPILE_SIMD_L) and the current translation unit can use the
|
|
46
|
+
* instructions of L (compiler macro), else 0. Use it to guard level
|
|
47
|
+
* code in headers that common files also include, for example
|
|
48
|
+
* `#if FAISS_SIMD_TU(AVX512)`. It is function-like, so a header that
|
|
49
|
+
* uses it without including this file fails to compile.
|
|
50
|
+
***************************************************************/
|
|
51
|
+
#ifdef SWIG
|
|
52
|
+
#define FAISS_SIMD_TU(level) 0
|
|
53
|
+
#else
|
|
54
|
+
|
|
55
|
+
#if defined(COMPILE_SIMD_AVX2) && defined(__AVX2__)
|
|
56
|
+
#define FAISS_SIMD_TU_AVX2 1
|
|
57
|
+
#else
|
|
58
|
+
#define FAISS_SIMD_TU_AVX2 0
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
#if defined(COMPILE_SIMD_AVX512) && defined(__AVX512F__)
|
|
62
|
+
#define FAISS_SIMD_TU_AVX512 1
|
|
63
|
+
#else
|
|
64
|
+
#define FAISS_SIMD_TU_AVX512 0
|
|
65
|
+
#endif
|
|
66
|
+
|
|
67
|
+
#if defined(COMPILE_SIMD_AVX512_VPOPCNT) && defined(__AVX512VPOPCNTDQ__)
|
|
68
|
+
#define FAISS_SIMD_TU_AVX512_VPOPCNT 1
|
|
69
|
+
#else
|
|
70
|
+
#define FAISS_SIMD_TU_AVX512_VPOPCNT 0
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
#if defined(COMPILE_SIMD_AVX512_SPR) && defined(__AVX512FP16__)
|
|
74
|
+
#define FAISS_SIMD_TU_AVX512_SPR 1
|
|
75
|
+
#else
|
|
76
|
+
#define FAISS_SIMD_TU_AVX512_SPR 0
|
|
77
|
+
#endif
|
|
78
|
+
|
|
79
|
+
// __aarch64__ is not defined by MSVC, which cannot compile the NEON code.
|
|
80
|
+
#if defined(COMPILE_SIMD_ARM_NEON) && defined(__aarch64__)
|
|
81
|
+
#define FAISS_SIMD_TU_ARM_NEON 1
|
|
82
|
+
#else
|
|
83
|
+
#define FAISS_SIMD_TU_ARM_NEON 0
|
|
84
|
+
#endif
|
|
85
|
+
|
|
86
|
+
#if defined(COMPILE_SIMD_ARM_SVE) && defined(__ARM_FEATURE_SVE)
|
|
87
|
+
#define FAISS_SIMD_TU_ARM_SVE 1
|
|
88
|
+
#else
|
|
89
|
+
#define FAISS_SIMD_TU_ARM_SVE 0
|
|
90
|
+
#endif
|
|
91
|
+
|
|
92
|
+
#if defined(COMPILE_SIMD_RISCV_RVV) && defined(__riscv_vector)
|
|
93
|
+
#define FAISS_SIMD_TU_RISCV_RVV 1
|
|
94
|
+
#else
|
|
95
|
+
#define FAISS_SIMD_TU_RISCV_RVV 0
|
|
96
|
+
#endif
|
|
97
|
+
|
|
98
|
+
#define FAISS_SIMD_TU(level) FAISS_SIMD_TU_##level
|
|
99
|
+
|
|
100
|
+
#endif // SWIG
|
|
101
|
+
|
|
39
102
|
/***************************************************************
|
|
40
103
|
* SINGLE_SIMD_LEVEL: the SIMD level for code without explicit SL context.
|
|
41
104
|
*
|
|
@@ -183,6 +246,16 @@ struct FAISS_API SIMDConfig {
|
|
|
183
246
|
/// 256-bit kernel.
|
|
184
247
|
static bool avx512_split;
|
|
185
248
|
|
|
249
|
+
/// Scalar table lookups beat gathers (AMD Zen 3, Zen 4 and Zen 5,
|
|
250
|
+
/// families 0x19 and 0x1A), so the 8-bit PQ code-distance kernels use
|
|
251
|
+
/// the scalar path instead of gathers.
|
|
252
|
+
static bool scalar_gather;
|
|
253
|
+
|
|
254
|
+
/// Same CPUs as scalar_gather. The AVX-512 QT_fp16, QT_bf16 and QT_8bit
|
|
255
|
+
/// inner-product distance loops use four accumulators per code at a
|
|
256
|
+
/// large d.
|
|
257
|
+
static bool sq_avx512_4_accumulators;
|
|
258
|
+
|
|
186
259
|
static SIMDLevel auto_detect_simd_level();
|
|
187
260
|
|
|
188
261
|
/// Whether this faiss build dispatches SIMD at runtime.
|
|
@@ -10,8 +10,6 @@
|
|
|
10
10
|
// This file contains transposing kernels for AVX2 for
|
|
11
11
|
// tiny float/int32 matrices, such as 8x2.
|
|
12
12
|
|
|
13
|
-
#ifdef __AVX2__
|
|
14
|
-
|
|
15
13
|
#include <immintrin.h>
|
|
16
14
|
|
|
17
15
|
namespace faiss {
|
|
@@ -161,5 +159,3 @@ inline void transpose_8x8(
|
|
|
161
159
|
}
|
|
162
160
|
|
|
163
161
|
} // namespace faiss
|
|
164
|
-
|
|
165
|
-
#endif
|
|
@@ -10,8 +10,6 @@
|
|
|
10
10
|
// This file contains transposing kernels for AVX512 for // tiny float/int32
|
|
11
11
|
// matrices, such as 16x2.
|
|
12
12
|
|
|
13
|
-
#ifdef __AVX512F__
|
|
14
|
-
|
|
15
13
|
#include <immintrin.h>
|
|
16
14
|
|
|
17
15
|
namespace faiss {
|
|
@@ -172,5 +170,3 @@ inline void transpose_16x8(
|
|
|
172
170
|
}
|
|
173
171
|
|
|
174
172
|
} // namespace faiss
|
|
175
|
-
|
|
176
|
-
#endif
|
|
@@ -28,14 +28,19 @@
|
|
|
28
28
|
#include <omp.h>
|
|
29
29
|
|
|
30
30
|
#include <algorithm>
|
|
31
|
+
#include <atomic>
|
|
31
32
|
#include <set>
|
|
32
33
|
#include <type_traits>
|
|
33
34
|
#include <unordered_set>
|
|
35
|
+
#include <utility>
|
|
34
36
|
#include <vector>
|
|
35
37
|
|
|
36
38
|
#include <faiss/impl/AuxIndexStructures.h>
|
|
37
39
|
#include <faiss/impl/FaissAssert.h>
|
|
40
|
+
#include <faiss/impl/simd_dispatch.h>
|
|
38
41
|
#include <faiss/utils/random.h>
|
|
42
|
+
#include <faiss/utils/simd_impl/fp16_kernels.h>
|
|
43
|
+
#include <faiss/utils/sorting.h>
|
|
39
44
|
|
|
40
45
|
#ifndef FINTEGER
|
|
41
46
|
#define FINTEGER long
|
|
@@ -175,6 +180,18 @@ uint64_t get_cycles() {
|
|
|
175
180
|
#endif
|
|
176
181
|
}
|
|
177
182
|
|
|
183
|
+
namespace {
|
|
184
|
+
std::atomic<bool> search_stats_enabled{true};
|
|
185
|
+
} // namespace
|
|
186
|
+
|
|
187
|
+
void set_search_stats_enabled(bool enabled) {
|
|
188
|
+
search_stats_enabled.store(enabled, std::memory_order_relaxed);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
bool get_search_stats_enabled() {
|
|
192
|
+
return search_stats_enabled.load(std::memory_order_relaxed);
|
|
193
|
+
}
|
|
194
|
+
|
|
178
195
|
#ifdef __linux__
|
|
179
196
|
|
|
180
197
|
size_t get_mem_usage_kb() {
|
|
@@ -461,6 +478,51 @@ void bvecs_checksum(size_t n, size_t d, const uint8_t* a, uint64_t* cs) {
|
|
|
461
478
|
}
|
|
462
479
|
}
|
|
463
480
|
|
|
481
|
+
size_t find_duplicate_codes(
|
|
482
|
+
size_t n,
|
|
483
|
+
size_t code_size,
|
|
484
|
+
const uint8_t* codes,
|
|
485
|
+
int64_t* rep) {
|
|
486
|
+
constexpr int64_t nbucket = 1 << 16;
|
|
487
|
+
std::vector<uint64_t> hash(n), bucket(n);
|
|
488
|
+
// the low bits of a checksum only depend on the low bits of its inputs
|
|
489
|
+
#pragma omp parallel for
|
|
490
|
+
for (int64_t i = 0; i < int64_t(n); i++) {
|
|
491
|
+
hash[i] = SplitMix64RandomGenerator(
|
|
492
|
+
bvec_checksum(code_size, codes + i * code_size))
|
|
493
|
+
.next();
|
|
494
|
+
bucket[i] = hash[i] % nbucket;
|
|
495
|
+
}
|
|
496
|
+
std::vector<int64_t> lims(nbucket + 1), order(n);
|
|
497
|
+
bucket_sort(n, bucket.data(), nbucket, lims.data(), order.data());
|
|
498
|
+
|
|
499
|
+
size_t n_distinct = 0;
|
|
500
|
+
#pragma omp parallel for schedule(dynamic) reduction(+ : n_distinct)
|
|
501
|
+
for (int64_t b = 0; b < nbucket; b++) {
|
|
502
|
+
int64_t* begin = order.data() + lims[b];
|
|
503
|
+
int64_t* end = order.data() + lims[b + 1];
|
|
504
|
+
std::sort(begin, end, [&](int64_t x, int64_t y) {
|
|
505
|
+
return std::pair(hash[x], x) < std::pair(hash[y], y);
|
|
506
|
+
});
|
|
507
|
+
const int64_t* group = begin;
|
|
508
|
+
for (const int64_t* r = begin; r < end; r++) {
|
|
509
|
+
if (hash[*r] != hash[*group]) {
|
|
510
|
+
group = r;
|
|
511
|
+
}
|
|
512
|
+
const int64_t* q = group;
|
|
513
|
+
while (q < r &&
|
|
514
|
+
memcmp(codes + *q * code_size,
|
|
515
|
+
codes + *r * code_size,
|
|
516
|
+
code_size) != 0) {
|
|
517
|
+
q++;
|
|
518
|
+
}
|
|
519
|
+
rep[*r] = *q;
|
|
520
|
+
n_distinct += q == r;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return n_distinct;
|
|
524
|
+
}
|
|
525
|
+
|
|
464
526
|
const float* fvecs_maybe_subsample(
|
|
465
527
|
size_t d,
|
|
466
528
|
size_t* n,
|
|
@@ -626,6 +688,24 @@ void CombinerRangeKNN<T>::write_result(T* D_res, int64_t* I_res) {
|
|
|
626
688
|
template struct CombinerRangeKNN<float>;
|
|
627
689
|
template struct CombinerRangeKNN<int16_t>;
|
|
628
690
|
|
|
691
|
+
void fp16_to_fp32(size_t n, const uint16_t* x, float* out) {
|
|
692
|
+
// below this many values, stay on the calling thread
|
|
693
|
+
constexpr size_t block = size_t(1) << 16;
|
|
694
|
+
with_selected_simd_levels<AVAILABLE_SIMD_LEVELS_BASE>([&]<SIMDLevel SL>() {
|
|
695
|
+
if (n <= block) {
|
|
696
|
+
detail::fp16_to_fp32_kernel<SL>(n, x, out);
|
|
697
|
+
return;
|
|
698
|
+
}
|
|
699
|
+
const int64_t nblock = static_cast<int64_t>((n + block - 1) / block);
|
|
700
|
+
#pragma omp parallel for
|
|
701
|
+
for (int64_t b = 0; b < nblock; b++) {
|
|
702
|
+
const size_t j0 = static_cast<size_t>(b) * block;
|
|
703
|
+
detail::fp16_to_fp32_kernel<SL>(
|
|
704
|
+
std::min(block, n - j0), x + j0, out + j0);
|
|
705
|
+
}
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
|
|
629
709
|
void CodeSet::insert(size_t n, const uint8_t* codes, bool* inserted) {
|
|
630
710
|
for (size_t i = 0; i < n; i++) {
|
|
631
711
|
auto res = s.insert(
|
|
@@ -48,6 +48,14 @@ size_t get_mem_usage_kb();
|
|
|
48
48
|
|
|
49
49
|
uint64_t get_cycles();
|
|
50
50
|
|
|
51
|
+
/** Enable or disable the collection of global search statistics (enabled by
|
|
52
|
+
* default). The flag is process-wide. When it is disabled, searches may skip
|
|
53
|
+
* updates to global stats objects, so their values are unspecified. At the
|
|
54
|
+
* moment, the flag controls hnsw_stats and rabitq_stats.
|
|
55
|
+
*/
|
|
56
|
+
void set_search_stats_enabled(bool enabled);
|
|
57
|
+
bool get_search_stats_enabled();
|
|
58
|
+
|
|
51
59
|
/***************************************************************************
|
|
52
60
|
* Misc matrix and vector manipulation functions
|
|
53
61
|
***************************************************************************/
|
|
@@ -122,6 +130,14 @@ uint64_t bvec_checksum(size_t n, const uint8_t* a);
|
|
|
122
130
|
*/
|
|
123
131
|
void bvecs_checksum(size_t n, size_t d, const uint8_t* a, uint64_t* cs);
|
|
124
132
|
|
|
133
|
+
/// rep[i]: lowest row whose code equals code i (codes: n x code_size).
|
|
134
|
+
/// Returns the number of distinct codes.
|
|
135
|
+
size_t find_duplicate_codes(
|
|
136
|
+
size_t n,
|
|
137
|
+
size_t code_size,
|
|
138
|
+
const uint8_t* codes,
|
|
139
|
+
int64_t* rep);
|
|
140
|
+
|
|
125
141
|
/** random subsamples a set of vectors if there are too many of them
|
|
126
142
|
*
|
|
127
143
|
* @param d dimension of the vectors
|
|
@@ -156,6 +172,14 @@ void binary_to_real(size_t d, const uint8_t* x_in, float* x_out);
|
|
|
156
172
|
*/
|
|
157
173
|
void real_to_binary(size_t d, const float* x_in, uint8_t* x_out);
|
|
158
174
|
|
|
175
|
+
/** Convert packed IEEE binary16 values to fp32 (exact).
|
|
176
|
+
*
|
|
177
|
+
* @param n number of values
|
|
178
|
+
* @param x input fp16 values, size n
|
|
179
|
+
* @param out output fp32 values, size n
|
|
180
|
+
*/
|
|
181
|
+
void fp16_to_fp32(size_t n, const uint16_t* x, float* out);
|
|
182
|
+
|
|
159
183
|
/** A reasonable hashing function */
|
|
160
184
|
uint64_t hash_bytes(const uint8_t* bytes, int64_t n);
|
|
161
185
|
|
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.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew Kane
|
|
@@ -123,6 +123,8 @@ files:
|
|
|
123
123
|
- vendor/faiss/faiss/IndexIVFRaBitQ.h
|
|
124
124
|
- vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp
|
|
125
125
|
- vendor/faiss/faiss/IndexIVFRaBitQFastScan.h
|
|
126
|
+
- vendor/faiss/faiss/IndexIVFSQFastScan.cpp
|
|
127
|
+
- vendor/faiss/faiss/IndexIVFSQFastScan.h
|
|
126
128
|
- vendor/faiss/faiss/IndexIVFSpectralHash.cpp
|
|
127
129
|
- vendor/faiss/faiss/IndexIVFSpectralHash.h
|
|
128
130
|
- vendor/faiss/faiss/IndexLSH.cpp
|
|
@@ -139,6 +141,8 @@ files:
|
|
|
139
141
|
- vendor/faiss/faiss/IndexPQ.h
|
|
140
142
|
- vendor/faiss/faiss/IndexPQFastScan.cpp
|
|
141
143
|
- vendor/faiss/faiss/IndexPQFastScan.h
|
|
144
|
+
- vendor/faiss/faiss/IndexPiPNN.cpp
|
|
145
|
+
- vendor/faiss/faiss/IndexPiPNN.h
|
|
142
146
|
- vendor/faiss/faiss/IndexPreTransform.cpp
|
|
143
147
|
- vendor/faiss/faiss/IndexPreTransform.h
|
|
144
148
|
- vendor/faiss/faiss/IndexRaBitQ.cpp
|
|
@@ -151,6 +155,8 @@ files:
|
|
|
151
155
|
- vendor/faiss/faiss/IndexReplicas.h
|
|
152
156
|
- vendor/faiss/faiss/IndexRowwiseMinMax.cpp
|
|
153
157
|
- vendor/faiss/faiss/IndexRowwiseMinMax.h
|
|
158
|
+
- vendor/faiss/faiss/IndexSQFastScan.cpp
|
|
159
|
+
- vendor/faiss/faiss/IndexSQFastScan.h
|
|
154
160
|
- vendor/faiss/faiss/IndexScalarQuantizer.cpp
|
|
155
161
|
- vendor/faiss/faiss/IndexScalarQuantizer.h
|
|
156
162
|
- vendor/faiss/faiss/IndexShards.cpp
|
|
@@ -183,6 +189,7 @@ files:
|
|
|
183
189
|
- vendor/faiss/faiss/cppcontrib/sa_decode/PQ-neon-inl.h
|
|
184
190
|
- vendor/faiss/faiss/factory_tools.cpp
|
|
185
191
|
- vendor/faiss/faiss/factory_tools.h
|
|
192
|
+
- vendor/faiss/faiss/gpu/Dataset.h
|
|
186
193
|
- vendor/faiss/faiss/gpu/GpuAutoTune.cpp
|
|
187
194
|
- vendor/faiss/faiss/gpu/GpuAutoTune.h
|
|
188
195
|
- vendor/faiss/faiss/gpu/GpuCloner.cpp
|
|
@@ -216,6 +223,7 @@ files:
|
|
|
216
223
|
- vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp
|
|
217
224
|
- vendor/faiss/faiss/gpu/perf/WriteIndex.cpp
|
|
218
225
|
- vendor/faiss/faiss/gpu/test/TestCodePacking.cpp
|
|
226
|
+
- vendor/faiss/faiss/gpu/test/TestGpuDatasetHeader.cpp
|
|
219
227
|
- vendor/faiss/faiss/gpu/test/TestGpuIcmEncoder.cpp
|
|
220
228
|
- vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp
|
|
221
229
|
- vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp
|
|
@@ -240,6 +248,7 @@ files:
|
|
|
240
248
|
- vendor/faiss/faiss/gpu_metal/MetalDistance.h
|
|
241
249
|
- vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h
|
|
242
250
|
- vendor/faiss/faiss/gpu_metal/MetalIndex.h
|
|
251
|
+
- vendor/faiss/faiss/gpu_metal/MetalIndexBinaryFlat.h
|
|
243
252
|
- vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h
|
|
244
253
|
- vendor/faiss/faiss/gpu_metal/MetalIndexIVFFlat.h
|
|
245
254
|
- vendor/faiss/faiss/gpu_metal/MetalIndexIVFPQ.h
|
|
@@ -263,6 +272,7 @@ files:
|
|
|
263
272
|
- vendor/faiss/faiss/impl/CodePacker.h
|
|
264
273
|
- vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp
|
|
265
274
|
- vendor/faiss/faiss/impl/CodePackerRaBitQ.h
|
|
275
|
+
- vendor/faiss/faiss/impl/DistanceComputer.cpp
|
|
266
276
|
- vendor/faiss/faiss/impl/DistanceComputer.h
|
|
267
277
|
- vendor/faiss/faiss/impl/EDENQuantizer.h
|
|
268
278
|
- vendor/faiss/faiss/impl/FaissAssert.h
|
|
@@ -285,6 +295,8 @@ files:
|
|
|
285
295
|
- vendor/faiss/faiss/impl/PanoramaStats.h
|
|
286
296
|
- vendor/faiss/faiss/impl/PdxLayout.cpp
|
|
287
297
|
- vendor/faiss/faiss/impl/PdxLayout.h
|
|
298
|
+
- vendor/faiss/faiss/impl/PiPNN.cpp
|
|
299
|
+
- vendor/faiss/faiss/impl/PiPNN.h
|
|
288
300
|
- vendor/faiss/faiss/impl/PolysemousTraining.cpp
|
|
289
301
|
- vendor/faiss/faiss/impl/PolysemousTraining.h
|
|
290
302
|
- vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp
|
|
@@ -338,6 +350,7 @@ files:
|
|
|
338
350
|
- vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp
|
|
339
351
|
- vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp
|
|
340
352
|
- vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp
|
|
353
|
+
- vendor/faiss/faiss/impl/fast_scan/kernels_neon.h
|
|
341
354
|
- vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h
|
|
342
355
|
- vendor/faiss/faiss/impl/fast_scan/kernels_simd512.h
|
|
343
356
|
- vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h
|
|
@@ -362,6 +375,12 @@ files:
|
|
|
362
375
|
- vendor/faiss/faiss/impl/mapped_io.cpp
|
|
363
376
|
- vendor/faiss/faiss/impl/mapped_io.h
|
|
364
377
|
- vendor/faiss/faiss/impl/maybe_owned_vector.h
|
|
378
|
+
- vendor/faiss/faiss/impl/pipnn/HashPrune.cpp
|
|
379
|
+
- vendor/faiss/faiss/impl/pipnn/HashPrune.h
|
|
380
|
+
- vendor/faiss/faiss/impl/pipnn/Partition.cpp
|
|
381
|
+
- vendor/faiss/faiss/impl/pipnn/Partition.h
|
|
382
|
+
- vendor/faiss/faiss/impl/pipnn/kernels.cpp
|
|
383
|
+
- vendor/faiss/faiss/impl/pipnn/kernels.h
|
|
365
384
|
- vendor/faiss/faiss/impl/platform_macros.h
|
|
366
385
|
- vendor/faiss/faiss/impl/polysemous_training/avx512.cpp
|
|
367
386
|
- vendor/faiss/faiss/impl/polysemous_training/dispatch.h
|
|
@@ -378,6 +397,7 @@ files:
|
|
|
378
397
|
- vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h
|
|
379
398
|
- vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h
|
|
380
399
|
- vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp
|
|
400
|
+
- vendor/faiss/faiss/impl/pq_code_distance/pq_rvv_kernel.h
|
|
381
401
|
- vendor/faiss/faiss/impl/pq_code_distance/pq_scan_impl.h
|
|
382
402
|
- vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp
|
|
383
403
|
- vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp
|
|
@@ -400,6 +420,8 @@ files:
|
|
|
400
420
|
- vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h
|
|
401
421
|
- vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp
|
|
402
422
|
- vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp
|
|
423
|
+
- vendor/faiss/faiss/impl/scalar_quantizer/sq8_coefficients.h
|
|
424
|
+
- vendor/faiss/faiss/impl/scalar_quantizer/sq8_rvv_kernel.h
|
|
403
425
|
- vendor/faiss/faiss/impl/scalar_quantizer/training.cpp
|
|
404
426
|
- vendor/faiss/faiss/impl/scalar_quantizer/training.h
|
|
405
427
|
- vendor/faiss/faiss/impl/simd_dispatch.h
|
|
@@ -410,6 +432,7 @@ files:
|
|
|
410
432
|
- vendor/faiss/faiss/impl/simdlib/simdlib_emulated.h
|
|
411
433
|
- vendor/faiss/faiss/impl/simdlib/simdlib_neon.h
|
|
412
434
|
- vendor/faiss/faiss/impl/simdlib/simdlib_ppc64.h
|
|
435
|
+
- vendor/faiss/faiss/impl/sq_fastscan_utils.h
|
|
413
436
|
- vendor/faiss/faiss/impl/svs_io.cpp
|
|
414
437
|
- vendor/faiss/faiss/impl/svs_io.h
|
|
415
438
|
- vendor/faiss/faiss/impl/zerocopy_io.cpp
|
|
@@ -459,6 +482,7 @@ files:
|
|
|
459
482
|
- vendor/faiss/faiss/utils/distances_fused/avx512.cpp
|
|
460
483
|
- vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp
|
|
461
484
|
- vendor/faiss/faiss/utils/distances_fused/distances_fused.h
|
|
485
|
+
- vendor/faiss/faiss/utils/distances_fused/rvv.cpp
|
|
462
486
|
- vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp
|
|
463
487
|
- vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp
|
|
464
488
|
- vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h
|
|
@@ -504,10 +528,18 @@ files:
|
|
|
504
528
|
- vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp
|
|
505
529
|
- vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp
|
|
506
530
|
- vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp
|
|
531
|
+
- vendor/faiss/faiss/utils/simd_impl/distances_rvv_kernel.h
|
|
507
532
|
- vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h
|
|
508
533
|
- vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h
|
|
509
534
|
- vendor/faiss/faiss/utils/simd_impl/exhaustive_L2sqr_blas_cmax.h
|
|
535
|
+
- vendor/faiss/faiss/utils/simd_impl/fp16_kernels.h
|
|
536
|
+
- vendor/faiss/faiss/utils/simd_impl/fp16_kernels_avx2.cpp
|
|
537
|
+
- vendor/faiss/faiss/utils/simd_impl/fp16_kernels_avx512.cpp
|
|
538
|
+
- vendor/faiss/faiss/utils/simd_impl/fp16_kernels_neon.cpp
|
|
510
539
|
- vendor/faiss/faiss/utils/simd_impl/hamming_impl.h
|
|
540
|
+
- vendor/faiss/faiss/utils/simd_impl/masked_sum-avx2.h
|
|
541
|
+
- vendor/faiss/faiss/utils/simd_impl/masked_sum-avx512.h
|
|
542
|
+
- vendor/faiss/faiss/utils/simd_impl/masked_sum.h
|
|
511
543
|
- vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp
|
|
512
544
|
- vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp
|
|
513
545
|
- vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h
|