faiss 0.6.0 → 0.6.1
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 +2 -1
- data/ext/faiss/{index_rb.cpp → index.cpp} +1 -1
- data/ext/faiss/index_binary.cpp +1 -1
- data/ext/faiss/kmeans.cpp +1 -1
- data/ext/faiss/pca_matrix.cpp +1 -1
- data/ext/faiss/product_quantizer.cpp +1 -1
- data/ext/faiss/{utils_rb.cpp → utils.cpp} +1 -1
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +93 -80
- data/vendor/faiss/faiss/Clustering.cpp +39 -240
- data/vendor/faiss/faiss/Clustering.h +6 -0
- data/vendor/faiss/faiss/IVFlib.cpp +41 -21
- data/vendor/faiss/faiss/Index.cpp +6 -5
- data/vendor/faiss/faiss/Index.h +5 -5
- data/vendor/faiss/faiss/Index2Layer.cpp +37 -53
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +49 -37
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +36 -34
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +4 -1
- data/vendor/faiss/faiss/IndexBinary.cpp +5 -3
- data/vendor/faiss/faiss/IndexBinary.h +4 -4
- data/vendor/faiss/faiss/IndexBinaryFlat.cpp +1 -1
- data/vendor/faiss/faiss/IndexBinaryFlat.h +1 -1
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -4
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +84 -92
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +9 -3
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +45 -236
- data/vendor/faiss/faiss/IndexBinaryHash.h +6 -6
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +87 -415
- data/vendor/faiss/faiss/IndexFastScan.cpp +72 -109
- data/vendor/faiss/faiss/IndexFastScan.h +25 -23
- data/vendor/faiss/faiss/IndexFlat.cpp +27 -20
- data/vendor/faiss/faiss/IndexFlat.h +21 -18
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +42 -19
- data/vendor/faiss/faiss/IndexHNSW.cpp +283 -145
- data/vendor/faiss/faiss/IndexHNSW.h +16 -2
- data/vendor/faiss/faiss/IndexIDMap.cpp +25 -21
- data/vendor/faiss/faiss/IndexIDMap.h +9 -7
- data/vendor/faiss/faiss/IndexIVF.cpp +465 -362
- data/vendor/faiss/faiss/IndexIVF.h +33 -12
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +77 -74
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +96 -93
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +4 -1
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +357 -238
- data/vendor/faiss/faiss/IndexIVFFastScan.h +42 -41
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +36 -68
- data/vendor/faiss/faiss/IndexIVFFlat.h +32 -0
- data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +53 -30
- data/vendor/faiss/faiss/IndexIVFFlatPanorama.h +3 -1
- data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +18 -15
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +71 -843
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +151 -121
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +3 -0
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +21 -17
- data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +26 -39
- data/vendor/faiss/faiss/IndexIVFRaBitQ.h +2 -1
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +475 -476
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +248 -93
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +41 -127
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +1 -1
- data/vendor/faiss/faiss/IndexLSH.cpp +36 -19
- data/vendor/faiss/faiss/IndexLattice.cpp +13 -13
- data/vendor/faiss/faiss/IndexNNDescent.cpp +36 -21
- data/vendor/faiss/faiss/IndexNNDescent.h +2 -2
- data/vendor/faiss/faiss/IndexNSG.cpp +39 -23
- data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +31 -11
- data/vendor/faiss/faiss/IndexPQ.cpp +128 -221
- data/vendor/faiss/faiss/IndexPQ.h +3 -2
- data/vendor/faiss/faiss/IndexPQFastScan.cpp +20 -14
- data/vendor/faiss/faiss/IndexPQFastScan.h +3 -0
- data/vendor/faiss/faiss/IndexPreTransform.cpp +25 -18
- data/vendor/faiss/faiss/IndexPreTransform.h +1 -1
- data/vendor/faiss/faiss/IndexRaBitQ.cpp +11 -36
- data/vendor/faiss/faiss/IndexRaBitQ.h +2 -1
- data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +41 -277
- data/vendor/faiss/faiss/IndexRaBitQFastScan.h +183 -27
- data/vendor/faiss/faiss/IndexRefine.cpp +30 -25
- data/vendor/faiss/faiss/IndexRefine.h +4 -4
- data/vendor/faiss/faiss/IndexReplicas.cpp +6 -6
- data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +15 -14
- data/vendor/faiss/faiss/IndexRowwiseMinMax.h +1 -1
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +82 -14
- data/vendor/faiss/faiss/IndexShards.cpp +10 -9
- data/vendor/faiss/faiss/IndexShardsIVF.cpp +21 -15
- data/vendor/faiss/faiss/MatrixStats.cpp +5 -4
- data/vendor/faiss/faiss/MetaIndexes.cpp +19 -17
- data/vendor/faiss/faiss/MetaIndexes.h +1 -1
- data/vendor/faiss/faiss/MetricType.h +14 -7
- data/vendor/faiss/faiss/SuperKMeans.cpp +656 -0
- data/vendor/faiss/faiss/SuperKMeans.h +97 -0
- data/vendor/faiss/faiss/VectorTransform.cpp +237 -149
- data/vendor/faiss/faiss/VectorTransform.h +16 -16
- data/vendor/faiss/faiss/build.cpp +23 -0
- data/vendor/faiss/faiss/build.h +15 -0
- data/vendor/faiss/faiss/clone_index.cpp +48 -47
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +47 -47
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +11 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +38 -38
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +11 -0
- data/vendor/faiss/faiss/factory_tools.cpp +5 -0
- data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +6 -5
- data/vendor/faiss/faiss/gpu/GpuResources.h +1 -1
- data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +9 -9
- data/vendor/faiss/faiss/gpu/StandardGpuResources.h +4 -3
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +46 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +56 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +78 -1
- data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +72 -0
- data/vendor/faiss/faiss/gpu/test/TestUtils.h +23 -0
- data/vendor/faiss/faiss/gpu/utils/CuvsFilterConvert.h +1 -1
- data/vendor/faiss/faiss/gpu/utils/CuvsUtils.h +21 -10
- data/vendor/faiss/faiss/gpu_metal/GpuIndexFlat.h +22 -0
- data/vendor/faiss/faiss/gpu_metal/MetalCloner.h +35 -0
- data/vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h +40 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +51 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h +65 -0
- data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +66 -0
- data/vendor/faiss/faiss/gpu_metal/MetalResources.h +79 -0
- data/vendor/faiss/faiss/gpu_metal/StandardMetalResources.h +35 -0
- data/vendor/faiss/faiss/impl/AdSampling.cpp +103 -0
- data/vendor/faiss/faiss/impl/AdSampling.h +35 -0
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +29 -25
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +1 -0
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +10 -9
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +3 -0
- data/vendor/faiss/faiss/impl/ClusteringHelpers.cpp +244 -0
- data/vendor/faiss/faiss/impl/ClusteringHelpers.h +94 -0
- data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +16 -16
- data/vendor/faiss/faiss/impl/CodePacker.cpp +3 -3
- data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +1 -1
- data/vendor/faiss/faiss/impl/DistanceComputer.h +8 -8
- data/vendor/faiss/faiss/impl/FaissAssert.h +6 -3
- data/vendor/faiss/faiss/impl/FaissException.h +50 -3
- data/vendor/faiss/faiss/impl/HNSW.cpp +92 -317
- data/vendor/faiss/faiss/impl/HNSW.h +13 -34
- data/vendor/faiss/faiss/impl/IDSelector.cpp +15 -11
- data/vendor/faiss/faiss/impl/IDSelector.h +8 -8
- data/vendor/faiss/faiss/impl/InvertedListScannerStats.h +26 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +82 -77
- data/vendor/faiss/faiss/impl/NNDescent.cpp +62 -25
- data/vendor/faiss/faiss/impl/NNDescent.h +6 -2
- data/vendor/faiss/faiss/impl/NSG.cpp +38 -21
- data/vendor/faiss/faiss/impl/NSG.h +4 -4
- data/vendor/faiss/faiss/impl/Panorama.cpp +23 -6
- data/vendor/faiss/faiss/impl/Panorama.h +258 -87
- data/vendor/faiss/faiss/impl/PdxLayout.cpp +93 -0
- data/vendor/faiss/faiss/impl/PdxLayout.h +41 -0
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +46 -32
- data/vendor/faiss/faiss/impl/PolysemousTraining.h +3 -3
- data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +35 -35
- data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +21 -16
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +30 -23
- data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
- data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +55 -49
- data/vendor/faiss/faiss/impl/RaBitQUtils.h +65 -0
- data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +296 -283
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +26 -23
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
- data/vendor/faiss/faiss/impl/ResultHandler.h +99 -75
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +52 -4
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +27 -1
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +14 -11
- data/vendor/faiss/faiss/impl/VisitedTable.h +7 -0
- data/vendor/faiss/faiss/impl/approx_topk/approx_topk.h +276 -0
- data/vendor/faiss/faiss/impl/approx_topk/avx2.cpp +68 -0
- data/vendor/faiss/faiss/{utils → impl}/approx_topk/generic.h +15 -8
- data/vendor/faiss/faiss/impl/approx_topk/neon.cpp +68 -0
- data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h +169 -0
- data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h +117 -0
- data/vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h +146 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h +73 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h +270 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +460 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h +159 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h +92 -0
- data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +26 -0
- data/vendor/faiss/faiss/impl/binary_hamming/avx512.cpp +26 -0
- data/vendor/faiss/faiss/impl/binary_hamming/dispatch.h +143 -0
- data/vendor/faiss/faiss/impl/binary_hamming/neon.cpp +26 -0
- data/vendor/faiss/faiss/impl/binary_hamming/rvv.cpp +26 -0
- data/vendor/faiss/faiss/impl/expanded_scanners.h +8 -3
- data/vendor/faiss/faiss/impl/{FastScanDistancePostProcessing.h → fast_scan/FastScanDistancePostProcessing.h} +13 -6
- data/vendor/faiss/faiss/impl/{LookupTableScaler.h → fast_scan/LookupTableScaler.h} +16 -5
- data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h +237 -0
- data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h +185 -0
- data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +229 -0
- data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +268 -0
- data/vendor/faiss/faiss/impl/{pq4_fast_scan.cpp → fast_scan/fast_scan.cpp} +169 -2
- data/vendor/faiss/faiss/impl/fast_scan/fast_scan.h +341 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp +36 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp +40 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp +120 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp +104 -0
- data/vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h +213 -0
- data/vendor/faiss/faiss/impl/{pq4_fast_scan_search_qbs.cpp → fast_scan/kernels_simd512.h} +26 -356
- data/vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h +90 -0
- data/vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h +108 -0
- data/vendor/faiss/faiss/impl/{simd_result_handlers.h → fast_scan/simd_result_handlers.h} +282 -134
- data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +54 -0
- data/vendor/faiss/faiss/impl/hnsw/LockVector.h +64 -0
- data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp +91 -0
- data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h +64 -0
- data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +104 -0
- data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +111 -0
- data/vendor/faiss/faiss/impl/index_read.cpp +1132 -45
- data/vendor/faiss/faiss/impl/index_read_utils.h +1 -1
- data/vendor/faiss/faiss/impl/index_write.cpp +95 -13
- data/vendor/faiss/faiss/impl/io.cpp +6 -6
- data/vendor/faiss/faiss/impl/io_macros.h +33 -16
- data/vendor/faiss/faiss/impl/kmeans1d.cpp +10 -10
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +37 -23
- data/vendor/faiss/faiss/impl/lattice_Zn.h +6 -6
- data/vendor/faiss/faiss/impl/mapped_io.cpp +6 -6
- data/vendor/faiss/faiss/impl/platform_macros.h +11 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +549 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +245 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h +105 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +106 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +21 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +21 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +21 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx2.cpp → pq_code_distance-avx2.h} +9 -13
- data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx512.cpp → pq_code_distance-avx512.h} +9 -57
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +29 -111
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h +96 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +238 -5
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp +5 -7
- data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +68 -0
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +311 -477
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +1 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +3 -2
- data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +102 -11
- data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +27 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +3 -3
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +148 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +167 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +59 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +163 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +311 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +192 -8
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +12 -0
- data/vendor/faiss/faiss/impl/simd_dispatch.h +100 -66
- data/vendor/faiss/faiss/impl/simdlib/simdlib.h +57 -0
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_avx2.h +264 -172
- data/vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h +414 -0
- data/vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h +44 -0
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_emulated.h +231 -166
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_neon.h +270 -218
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_ppc64.h +201 -160
- data/vendor/faiss/faiss/impl/svs_io.cpp +12 -3
- data/vendor/faiss/faiss/impl/svs_io.h +8 -2
- data/vendor/faiss/faiss/index_factory.cpp +86 -18
- data/vendor/faiss/faiss/index_io.h +24 -0
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +66 -16
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +24 -14
- data/vendor/faiss/faiss/invlists/DirectMap.h +4 -3
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +157 -73
- data/vendor/faiss/faiss/invlists/InvertedLists.h +86 -23
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +4 -4
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +13 -13
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +2 -2
- data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +350 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVF.h +128 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp +40 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h +43 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +225 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h +71 -0
- data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +25 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamana.h +18 -2
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +12 -3
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +7 -2
- data/vendor/faiss/faiss/utils/Heap.cpp +10 -10
- data/vendor/faiss/faiss/utils/NeuralNet.cpp +47 -36
- data/vendor/faiss/faiss/utils/NeuralNet.h +1 -1
- data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +10 -4
- data/vendor/faiss/faiss/utils/distances.cpp +390 -560
- data/vendor/faiss/faiss/utils/distances.h +20 -1
- data/vendor/faiss/faiss/utils/distances_dispatch.h +117 -37
- data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +8 -7
- data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +33 -14
- data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +12 -1
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +16 -293
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp +57 -0
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h +290 -0
- data/vendor/faiss/faiss/utils/distances_simd.cpp +5 -177
- data/vendor/faiss/faiss/utils/extra_distances.cpp +9 -8
- data/vendor/faiss/faiss/utils/extra_distances.h +32 -6
- data/vendor/faiss/faiss/utils/hamming-inl.h +13 -11
- data/vendor/faiss/faiss/utils/hamming.cpp +66 -517
- data/vendor/faiss/faiss/utils/hamming.h +92 -2
- data/vendor/faiss/faiss/utils/hamming_distance/common.h +287 -10
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +15 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp +15 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h +142 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +234 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h +368 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h +322 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h +39 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer.h +146 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h +481 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp +15 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp +15 -0
- data/vendor/faiss/faiss/utils/partitioning.cpp +66 -987
- data/vendor/faiss/faiss/utils/partitioning.h +31 -0
- data/vendor/faiss/faiss/utils/popcount.h +29 -0
- data/vendor/faiss/faiss/utils/pq_code_distance.h +2 -2
- data/vendor/faiss/faiss/utils/prefetch.h +2 -2
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +30 -30
- data/vendor/faiss/faiss/utils/quantize_lut.h +1 -1
- data/vendor/faiss/faiss/utils/rabitq_simd.h +57 -536
- data/vendor/faiss/faiss/utils/random.cpp +6 -6
- data/vendor/faiss/faiss/utils/simd_impl/IVFFlatScanner-inl.h +51 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp +5 -1
- data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +213 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +163 -10
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +250 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +7 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +189 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h +195 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h +2 -1
- data/vendor/faiss/faiss/utils/{distances_fused/simdlib_based.h → simd_impl/exhaustive_L2sqr_blas_cmax.h} +5 -10
- data/vendor/faiss/faiss/utils/simd_impl/hamming_impl.h +481 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp +14 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp +14 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h +1085 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +355 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +477 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +55 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +55 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h +32 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h +43 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp +57 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp +45 -0
- data/vendor/faiss/faiss/utils/simd_levels.cpp +17 -5
- data/vendor/faiss/faiss/utils/simd_levels.h +93 -1
- data/vendor/faiss/faiss/utils/sorting.cpp +48 -36
- data/vendor/faiss/faiss/utils/utils.cpp +5 -5
- data/vendor/faiss/faiss/utils/utils.h +3 -3
- metadata +119 -34
- data/vendor/faiss/faiss/impl/RaBitQStats.cpp +0 -29
- data/vendor/faiss/faiss/impl/RaBitQStats.h +0 -56
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +0 -224
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +0 -230
- data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +0 -84
- data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +0 -196
- data/vendor/faiss/faiss/utils/approx_topk/mode.h +0 -34
- data/vendor/faiss/faiss/utils/distances_fused/avx512.h +0 -36
- data/vendor/faiss/faiss/utils/extra_distances-inl.h +0 -235
- data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +0 -462
- data/vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h +0 -490
- data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +0 -449
- data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +0 -87
- data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +0 -524
- data/vendor/faiss/faiss/utils/simdlib.h +0 -42
- data/vendor/faiss/faiss/utils/simdlib_avx512.h +0 -365
- /data/ext/faiss/{utils_rb.h → utils.h} +0 -0
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
#include <memory>
|
|
11
11
|
|
|
12
|
-
#include <faiss/impl/FastScanDistancePostProcessing.h>
|
|
13
|
-
#include <faiss/impl/
|
|
12
|
+
#include <faiss/impl/fast_scan/FastScanDistancePostProcessing.h>
|
|
13
|
+
#include <faiss/impl/fast_scan/fast_scan.h>
|
|
14
14
|
#include <faiss/utils/utils.h>
|
|
15
15
|
|
|
16
16
|
namespace faiss {
|
|
@@ -20,25 +20,27 @@ inline size_t roundup(size_t a, size_t b) {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
IndexPQFastScan::IndexPQFastScan(
|
|
23
|
-
int
|
|
24
|
-
size_t
|
|
25
|
-
size_t
|
|
23
|
+
int d_in,
|
|
24
|
+
size_t M_in,
|
|
25
|
+
size_t nbits_in,
|
|
26
26
|
MetricType metric,
|
|
27
|
-
int
|
|
28
|
-
: pq(
|
|
29
|
-
init_fastscan(
|
|
27
|
+
int bbs_in)
|
|
28
|
+
: pq(d_in, M_in, nbits_in) {
|
|
29
|
+
init_fastscan(d_in, M_in, nbits_in, metric, bbs_in);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
IndexPQFastScan::IndexPQFastScan(const IndexPQ& orig, int
|
|
33
|
-
|
|
32
|
+
IndexPQFastScan::IndexPQFastScan(const IndexPQ& orig, int bbs_in)
|
|
33
|
+
: pq(orig.pq) {
|
|
34
|
+
init_fastscan(orig.d, pq.M, pq.nbits, orig.metric_type, bbs_in);
|
|
34
35
|
ntotal = orig.ntotal;
|
|
35
|
-
ntotal2 = roundup(ntotal,
|
|
36
|
+
ntotal2 = roundup(ntotal, bbs_in);
|
|
36
37
|
is_trained = orig.is_trained;
|
|
37
38
|
orig_codes = orig.codes.data();
|
|
38
39
|
|
|
39
40
|
// pack the codes
|
|
40
41
|
codes.resize(ntotal2 * M2 / 2);
|
|
41
|
-
pq4_pack_codes(
|
|
42
|
+
pq4_pack_codes(
|
|
43
|
+
orig.codes.data(), ntotal, M, ntotal2, bbs_in, M2, codes.get());
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
void IndexPQFastScan::train(idx_t n, const float* x) {
|
|
@@ -49,9 +51,9 @@ void IndexPQFastScan::train(idx_t n, const float* x) {
|
|
|
49
51
|
is_trained = true;
|
|
50
52
|
}
|
|
51
53
|
|
|
52
|
-
void IndexPQFastScan::compute_codes(uint8_t*
|
|
54
|
+
void IndexPQFastScan::compute_codes(uint8_t* out_codes, idx_t n, const float* x)
|
|
53
55
|
const {
|
|
54
|
-
pq.compute_codes(x,
|
|
56
|
+
pq.compute_codes(x, out_codes, n);
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
void IndexPQFastScan::compute_float_LUT(
|
|
@@ -70,4 +72,8 @@ void IndexPQFastScan::sa_decode(idx_t n, const uint8_t* bytes, float* x) const {
|
|
|
70
72
|
pq.decode(bytes, x, n);
|
|
71
73
|
}
|
|
72
74
|
|
|
75
|
+
size_t IndexPQFastScan::fast_scan_code_size() const {
|
|
76
|
+
return M2 / 2;
|
|
77
|
+
}
|
|
78
|
+
|
|
73
79
|
} // namespace faiss
|
|
@@ -52,6 +52,9 @@ struct IndexPQFastScan : IndexFastScan {
|
|
|
52
52
|
const FastScanDistancePostProcessing& context) const override;
|
|
53
53
|
|
|
54
54
|
void sa_decode(idx_t n, const uint8_t* bytes, float* x) const override;
|
|
55
|
+
|
|
56
|
+
/// Packed code size: M2 / 2 bytes (4-bit PQ sub-quantizer nibbles)
|
|
57
|
+
size_t fast_scan_code_size() const override;
|
|
55
58
|
};
|
|
56
59
|
|
|
57
60
|
} // namespace faiss
|
|
@@ -26,16 +26,20 @@ namespace faiss {
|
|
|
26
26
|
|
|
27
27
|
IndexPreTransform::IndexPreTransform() : index(nullptr), own_fields(false) {}
|
|
28
28
|
|
|
29
|
-
IndexPreTransform::IndexPreTransform(Index*
|
|
30
|
-
: Index(
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
IndexPreTransform::IndexPreTransform(Index* index_in)
|
|
30
|
+
: Index(index_in->d, index_in->metric_type),
|
|
31
|
+
index(index_in),
|
|
32
|
+
own_fields(false) {
|
|
33
|
+
is_trained = index_in->is_trained;
|
|
34
|
+
ntotal = index_in->ntotal;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
IndexPreTransform::IndexPreTransform(VectorTransform* ltrans, Index*
|
|
36
|
-
: Index(
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
IndexPreTransform::IndexPreTransform(VectorTransform* ltrans, Index* index_in)
|
|
38
|
+
: Index(index_in->d, index_in->metric_type),
|
|
39
|
+
index(index_in),
|
|
40
|
+
own_fields(false) {
|
|
41
|
+
is_trained = index_in->is_trained;
|
|
42
|
+
ntotal = index_in->ntotal;
|
|
39
43
|
prepend_transform(ltrans);
|
|
40
44
|
}
|
|
41
45
|
|
|
@@ -48,7 +52,7 @@ void IndexPreTransform::prepend_transform(VectorTransform* ltrans) {
|
|
|
48
52
|
|
|
49
53
|
IndexPreTransform::~IndexPreTransform() {
|
|
50
54
|
if (own_fields) {
|
|
51
|
-
for (
|
|
55
|
+
for (size_t i = 0; i < chain.size(); i++) {
|
|
52
56
|
delete chain[i];
|
|
53
57
|
}
|
|
54
58
|
delete index;
|
|
@@ -58,9 +62,9 @@ IndexPreTransform::~IndexPreTransform() {
|
|
|
58
62
|
void IndexPreTransform::train(idx_t n, const float* x) {
|
|
59
63
|
int last_untrained = 0;
|
|
60
64
|
if (!index->is_trained) {
|
|
61
|
-
last_untrained = chain.size();
|
|
65
|
+
last_untrained = static_cast<int>(chain.size());
|
|
62
66
|
} else {
|
|
63
|
-
for (int i = chain.size() - 1; i >= 0; i--) {
|
|
67
|
+
for (int i = static_cast<int>(chain.size()) - 1; i >= 0; i--) {
|
|
64
68
|
if (!chain[i]->is_trained) {
|
|
65
69
|
last_untrained = i;
|
|
66
70
|
break;
|
|
@@ -76,7 +80,7 @@ void IndexPreTransform::train(idx_t n, const float* x) {
|
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
for (int i = 0; i <= last_untrained; i++) {
|
|
79
|
-
if (i < chain.size()) {
|
|
83
|
+
if (i < static_cast<int>(chain.size())) {
|
|
80
84
|
VectorTransform* ltrans = chain[i];
|
|
81
85
|
if (!ltrans->is_trained) {
|
|
82
86
|
if (verbose) {
|
|
@@ -119,13 +123,15 @@ const float* IndexPreTransform::apply_chain(idx_t n, const float* x) const {
|
|
|
119
123
|
const float* prev_x = x;
|
|
120
124
|
std::unique_ptr<const float[]> del;
|
|
121
125
|
|
|
122
|
-
for (
|
|
126
|
+
for (size_t i = 0; i < chain.size(); i++) {
|
|
123
127
|
float* xt = chain[i]->apply(n, prev_x);
|
|
124
128
|
std::unique_ptr<const float[]> del2(xt);
|
|
125
129
|
del2.swap(del);
|
|
126
130
|
prev_x = xt;
|
|
127
131
|
}
|
|
128
|
-
|
|
132
|
+
// Intentionally release ownership: caller takes ownership of the returned
|
|
133
|
+
// buffer
|
|
134
|
+
(void)del.release();
|
|
129
135
|
return prev_x;
|
|
130
136
|
}
|
|
131
137
|
|
|
@@ -134,7 +140,7 @@ void IndexPreTransform::reverse_chain(idx_t n, const float* xt, float* x)
|
|
|
134
140
|
const float* next_x = xt;
|
|
135
141
|
std::unique_ptr<const float[]> del;
|
|
136
142
|
|
|
137
|
-
for (int i = chain.size() - 1; i >= 0; i--) {
|
|
143
|
+
for (int i = static_cast<int>(chain.size()) - 1; i >= 0; i--) {
|
|
138
144
|
float* prev_x = (i == 0) ? x : new float[n * chain[i]->d_in];
|
|
139
145
|
std::unique_ptr<const float[]> del2((prev_x == x) ? nullptr : prev_x);
|
|
140
146
|
chain[i]->reverse_transform(n, next_x, prev_x);
|
|
@@ -305,7 +311,7 @@ void IndexPreTransform::check_compatible_for_merge(
|
|
|
305
311
|
auto other = dynamic_cast<const IndexPreTransform*>(&otherIndex);
|
|
306
312
|
FAISS_THROW_IF_NOT(other);
|
|
307
313
|
FAISS_THROW_IF_NOT(chain.size() == other->chain.size());
|
|
308
|
-
for (
|
|
314
|
+
for (size_t i = 0; i < chain.size(); i++) {
|
|
309
315
|
chain[i]->check_identical(*other->chain[i]);
|
|
310
316
|
}
|
|
311
317
|
index->check_compatible_for_merge(*other->index);
|
|
@@ -318,8 +324,9 @@ struct PreTransformDistanceComputer : DistanceComputer {
|
|
|
318
324
|
std::unique_ptr<DistanceComputer> sub_dc;
|
|
319
325
|
std::unique_ptr<const float[]> query;
|
|
320
326
|
|
|
321
|
-
explicit PreTransformDistanceComputer(const IndexPreTransform*
|
|
322
|
-
: index(
|
|
327
|
+
explicit PreTransformDistanceComputer(const IndexPreTransform* index_in)
|
|
328
|
+
: index(index_in),
|
|
329
|
+
sub_dc(index_in->index->get_distance_computer()) {}
|
|
323
330
|
|
|
324
331
|
void set_query(const float* x) override {
|
|
325
332
|
const float* xt = index->apply_chain(1, x);
|
|
@@ -26,7 +26,7 @@ struct IndexPreTransform : Index {
|
|
|
26
26
|
std::vector<VectorTransform*> chain; ///! chain of transforms
|
|
27
27
|
Index* index; ///! the sub-index
|
|
28
28
|
|
|
29
|
-
bool own_fields; ///! whether pointers are deleted in destructor
|
|
29
|
+
bool own_fields = false; ///! whether pointers are deleted in destructor
|
|
30
30
|
|
|
31
31
|
explicit IndexPreTransform(Index* index);
|
|
32
32
|
|
|
@@ -21,8 +21,8 @@ using rabitq_utils::SignBitFactorsWithError;
|
|
|
21
21
|
|
|
22
22
|
IndexRaBitQ::IndexRaBitQ() = default;
|
|
23
23
|
|
|
24
|
-
IndexRaBitQ::IndexRaBitQ(idx_t
|
|
25
|
-
: IndexFlatCodes(0,
|
|
24
|
+
IndexRaBitQ::IndexRaBitQ(idx_t d_in, MetricType metric, uint8_t nb_bits_in)
|
|
25
|
+
: IndexFlatCodes(0, d_in, metric), rabitq(d_in, metric, nb_bits_in) {
|
|
26
26
|
// Update code size based on nb_bits
|
|
27
27
|
code_size = rabitq.code_size;
|
|
28
28
|
|
|
@@ -32,14 +32,14 @@ IndexRaBitQ::IndexRaBitQ(idx_t d, MetricType metric, uint8_t nb_bits_in)
|
|
|
32
32
|
void IndexRaBitQ::train(idx_t n, const float* x) {
|
|
33
33
|
// compute a centroid
|
|
34
34
|
std::vector<float> centroid(d, 0);
|
|
35
|
-
for (
|
|
36
|
-
for (size_t j = 0; j < d; j++) {
|
|
35
|
+
for (idx_t i = 0; i < n; i++) {
|
|
36
|
+
for (size_t j = 0; j < static_cast<size_t>(d); j++) {
|
|
37
37
|
centroid[j] += x[i * d + j];
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
if (n != 0) {
|
|
42
|
-
for (size_t j = 0; j < d; j++) {
|
|
42
|
+
for (size_t j = 0; j < static_cast<size_t>(d); j++) {
|
|
43
43
|
centroid[j] /= (float)n;
|
|
44
44
|
}
|
|
45
45
|
}
|
|
@@ -70,10 +70,10 @@ FlatCodesDistanceComputer* IndexRaBitQ::get_FlatCodesDistanceComputer() const {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
FlatCodesDistanceComputer* IndexRaBitQ::get_quantized_distance_computer(
|
|
73
|
-
const uint8_t
|
|
74
|
-
bool
|
|
73
|
+
const uint8_t qb_in,
|
|
74
|
+
bool centered_in) const {
|
|
75
75
|
FlatCodesDistanceComputer* dc =
|
|
76
|
-
rabitq.get_distance_computer(
|
|
76
|
+
rabitq.get_distance_computer(qb_in, center.data(), centered_in);
|
|
77
77
|
dc->code_size = rabitq.code_size;
|
|
78
78
|
dc->codes = codes.data();
|
|
79
79
|
return dc;
|
|
@@ -102,19 +102,12 @@ struct Run_search_with_dc_res {
|
|
|
102
102
|
index->get_quantized_distance_computer(qb, centered));
|
|
103
103
|
SingleResultHandler resi(res);
|
|
104
104
|
#pragma omp for
|
|
105
|
-
for (int64_t q = 0; q < res.nq; q++) {
|
|
105
|
+
for (int64_t q = 0; q < static_cast<int64_t>(res.nq); q++) {
|
|
106
106
|
resi.begin(q);
|
|
107
107
|
dc_base->set_query(xq + d * q);
|
|
108
108
|
|
|
109
|
-
// Stats tracking for multi-bit two-stage search only
|
|
110
|
-
// n_1bit_evaluations: candidates evaluated using 1-bit lower
|
|
111
|
-
// bound n_multibit_evaluations: candidates requiring full
|
|
112
|
-
// multi-bit distance
|
|
113
|
-
size_t local_1bit_evaluations = 0;
|
|
114
|
-
size_t local_multibit_evaluations = 0;
|
|
115
|
-
|
|
116
109
|
if (ex_bits == 0) {
|
|
117
|
-
// 1-bit: Standard single-stage search
|
|
110
|
+
// 1-bit: Standard single-stage search
|
|
118
111
|
for (size_t i = 0; i < ntotal; i++) {
|
|
119
112
|
if (res.is_in_selection(i)) {
|
|
120
113
|
float dis = (*dc_base)(i);
|
|
@@ -133,7 +126,6 @@ struct Run_search_with_dc_res {
|
|
|
133
126
|
dc != nullptr,
|
|
134
127
|
"Failed to cast to RaBitQDistanceComputer for two-stage search");
|
|
135
128
|
|
|
136
|
-
// Use appropriate comparison based on metric type
|
|
137
129
|
bool is_similarity =
|
|
138
130
|
is_similarity_metric(index->metric_type);
|
|
139
131
|
|
|
@@ -142,16 +134,9 @@ struct Run_search_with_dc_res {
|
|
|
142
134
|
const uint8_t* code =
|
|
143
135
|
index->codes.data() + i * index->code_size;
|
|
144
136
|
|
|
145
|
-
local_1bit_evaluations++;
|
|
146
|
-
|
|
147
|
-
// Stage 1: Compute distance bound using 1-bit codes
|
|
148
|
-
// For L2 (min-heap): use lower_bound (est -
|
|
149
|
-
// error) For IP (max-heap): use upper_bound (est
|
|
150
|
-
// + error)
|
|
151
137
|
float est_distance =
|
|
152
138
|
dc->distance_to_code_1bit(code);
|
|
153
139
|
|
|
154
|
-
// Extract f_error for filtering
|
|
155
140
|
size_t code_size_base = (index->d + 7) / 8;
|
|
156
141
|
const rabitq_utils::SignBitFactorsWithError*
|
|
157
142
|
base_fac = reinterpret_cast<
|
|
@@ -159,7 +144,6 @@ struct Run_search_with_dc_res {
|
|
|
159
144
|
SignBitFactorsWithError*>(
|
|
160
145
|
code + code_size_base);
|
|
161
146
|
|
|
162
|
-
// Stage 2: Adaptive filtering
|
|
163
147
|
bool should_refine =
|
|
164
148
|
rabitq_utils::should_refine_candidate(
|
|
165
149
|
est_distance,
|
|
@@ -168,8 +152,6 @@ struct Run_search_with_dc_res {
|
|
|
168
152
|
resi.threshold,
|
|
169
153
|
is_similarity);
|
|
170
154
|
if (should_refine) {
|
|
171
|
-
local_multibit_evaluations++;
|
|
172
|
-
// Compute full multi-bit distance
|
|
173
155
|
float dist_full =
|
|
174
156
|
dc->distance_to_code_full(code);
|
|
175
157
|
resi.add_result(dist_full, i);
|
|
@@ -178,13 +160,6 @@ struct Run_search_with_dc_res {
|
|
|
178
160
|
}
|
|
179
161
|
}
|
|
180
162
|
|
|
181
|
-
// Update global stats atomically
|
|
182
|
-
#pragma omp atomic
|
|
183
|
-
rabitq_stats.n_1bit_evaluations += local_1bit_evaluations;
|
|
184
|
-
#pragma omp atomic
|
|
185
|
-
rabitq_stats.n_multibit_evaluations +=
|
|
186
|
-
local_multibit_evaluations;
|
|
187
|
-
|
|
188
163
|
resi.end();
|
|
189
164
|
}
|
|
190
165
|
}
|
|
@@ -224,7 +199,7 @@ void IndexRaBitQ::search(
|
|
|
224
199
|
}
|
|
225
200
|
|
|
226
201
|
void IndexRaBitQ::range_search(
|
|
227
|
-
idx_t n
|
|
202
|
+
idx_t /*n*/,
|
|
228
203
|
const float* x,
|
|
229
204
|
float radius,
|
|
230
205
|
RangeSearchResult* result,
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
#pragma once
|
|
9
9
|
|
|
10
10
|
#include <faiss/IndexFlatCodes.h>
|
|
11
|
-
#include <faiss/impl/RaBitQStats.h>
|
|
12
11
|
#include <faiss/impl/RaBitQuantizer.h>
|
|
13
12
|
|
|
14
13
|
namespace faiss {
|
|
@@ -26,6 +25,8 @@ struct IndexRaBitQ : IndexFlatCodes {
|
|
|
26
25
|
|
|
27
26
|
// the default number of bits to quantize a query with.
|
|
28
27
|
// use '0' to disable quantization and use raw fp32 values.
|
|
28
|
+
// Note: qb=0 is NOT supported by FastScan variants, which require
|
|
29
|
+
// quantized queries for SIMD lookup table construction.
|
|
29
30
|
uint8_t qb = 4;
|
|
30
31
|
|
|
31
32
|
// quantize the query with a zero-centered scalar quantizer.
|