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
|
@@ -14,9 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
#include <faiss/impl/AuxIndexStructures.h>
|
|
16
16
|
#include <faiss/impl/FaissAssert.h>
|
|
17
|
-
#include <faiss/impl/FastScanDistancePostProcessing.h>
|
|
18
|
-
#include <faiss/impl/
|
|
19
|
-
#include <faiss/impl/pq4_fast_scan.h>
|
|
17
|
+
#include <faiss/impl/fast_scan/FastScanDistancePostProcessing.h>
|
|
18
|
+
#include <faiss/impl/fast_scan/fast_scan.h>
|
|
20
19
|
#include <faiss/impl/simd_dispatch.h>
|
|
21
20
|
#include <faiss/invlists/BlockInvertedLists.h>
|
|
22
21
|
#include <faiss/utils/distances.h>
|
|
@@ -30,46 +29,46 @@ inline size_t roundup(size_t a, size_t b) {
|
|
|
30
29
|
}
|
|
31
30
|
|
|
32
31
|
IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan(
|
|
33
|
-
Index*
|
|
34
|
-
AdditiveQuantizer*
|
|
35
|
-
size_t
|
|
36
|
-
size_t
|
|
32
|
+
Index* quantizer_,
|
|
33
|
+
AdditiveQuantizer* aq_,
|
|
34
|
+
size_t d_,
|
|
35
|
+
size_t nlist_,
|
|
37
36
|
MetricType metric,
|
|
38
|
-
int
|
|
39
|
-
bool
|
|
40
|
-
: IndexIVFFastScan(
|
|
41
|
-
if (
|
|
42
|
-
init(
|
|
37
|
+
int bbs_,
|
|
38
|
+
bool own_invlists_)
|
|
39
|
+
: IndexIVFFastScan(quantizer_, d_, nlist_, 0, metric, own_invlists_) {
|
|
40
|
+
if (aq_ != nullptr) {
|
|
41
|
+
init(aq_, nlist_, metric, bbs_, own_invlists_);
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
void IndexIVFAdditiveQuantizerFastScan::init(
|
|
47
|
-
AdditiveQuantizer*
|
|
48
|
-
size_t
|
|
46
|
+
AdditiveQuantizer* aq_,
|
|
47
|
+
size_t nlist_,
|
|
49
48
|
MetricType metric,
|
|
50
|
-
int
|
|
51
|
-
bool
|
|
52
|
-
FAISS_THROW_IF_NOT(
|
|
53
|
-
FAISS_THROW_IF_NOT(!
|
|
54
|
-
FAISS_THROW_IF_NOT(
|
|
49
|
+
int bbs_,
|
|
50
|
+
bool own_invlists_) {
|
|
51
|
+
FAISS_THROW_IF_NOT(aq_ != nullptr);
|
|
52
|
+
FAISS_THROW_IF_NOT(!aq_->nbits.empty());
|
|
53
|
+
FAISS_THROW_IF_NOT(aq_->nbits[0] == 4);
|
|
55
54
|
if (metric == METRIC_INNER_PRODUCT) {
|
|
56
55
|
FAISS_THROW_IF_NOT_MSG(
|
|
57
|
-
|
|
56
|
+
aq_->search_type == AdditiveQuantizer::ST_LUT_nonorm,
|
|
58
57
|
"Search type must be ST_LUT_nonorm for IP metric");
|
|
59
58
|
} else {
|
|
60
59
|
FAISS_THROW_IF_NOT_MSG(
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
aq_->search_type == AdditiveQuantizer::ST_norm_lsq2x4 ||
|
|
61
|
+
aq_->search_type == AdditiveQuantizer::ST_norm_rq2x4,
|
|
63
62
|
"Search type must be lsq2x4 or rq2x4 for L2 metric");
|
|
64
63
|
}
|
|
65
64
|
|
|
66
|
-
this->aq =
|
|
65
|
+
this->aq = aq_;
|
|
67
66
|
if (metric_type == METRIC_L2) {
|
|
68
|
-
M =
|
|
67
|
+
M = aq_->M + 2; // 2x4 bits AQ
|
|
69
68
|
} else {
|
|
70
|
-
M =
|
|
69
|
+
M = aq_->M;
|
|
71
70
|
}
|
|
72
|
-
init_fastscan(
|
|
71
|
+
init_fastscan(aq_, M, 4, nlist_, metric, bbs_, own_invlists_);
|
|
73
72
|
|
|
74
73
|
max_train_points = 1024 * ksub * M;
|
|
75
74
|
by_residual = true;
|
|
@@ -77,7 +76,7 @@ void IndexIVFAdditiveQuantizerFastScan::init(
|
|
|
77
76
|
|
|
78
77
|
IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan(
|
|
79
78
|
const IndexIVFAdditiveQuantizer& orig,
|
|
80
|
-
int
|
|
79
|
+
int bbs_)
|
|
81
80
|
: IndexIVFFastScan(
|
|
82
81
|
orig.quantizer,
|
|
83
82
|
orig.d,
|
|
@@ -89,7 +88,7 @@ IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan(
|
|
|
89
88
|
FAISS_THROW_IF_NOT(
|
|
90
89
|
metric_type == METRIC_INNER_PRODUCT || !orig.by_residual);
|
|
91
90
|
|
|
92
|
-
init(aq, nlist, metric_type,
|
|
91
|
+
init(aq, nlist, metric_type, bbs_, own_invlists);
|
|
93
92
|
|
|
94
93
|
is_trained = orig.is_trained;
|
|
95
94
|
ntotal = orig.ntotal;
|
|
@@ -130,6 +129,10 @@ IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan() {
|
|
|
130
129
|
IndexIVFAdditiveQuantizerFastScan::~IndexIVFAdditiveQuantizerFastScan() =
|
|
131
130
|
default;
|
|
132
131
|
|
|
132
|
+
size_t IndexIVFAdditiveQuantizerFastScan::fast_scan_code_size() const {
|
|
133
|
+
return M2 / 2;
|
|
134
|
+
}
|
|
135
|
+
|
|
133
136
|
/*********************************************************
|
|
134
137
|
* Training
|
|
135
138
|
*********************************************************/
|
|
@@ -317,9 +320,8 @@ void IndexIVFAdditiveQuantizerFastScan::search(
|
|
|
317
320
|
return;
|
|
318
321
|
}
|
|
319
322
|
|
|
320
|
-
NormTableScaler scaler(norm_scale);
|
|
321
323
|
FastScanDistancePostProcessing context;
|
|
322
|
-
context.
|
|
324
|
+
context.pq2x4_scale = norm_scale;
|
|
323
325
|
IndexIVFFastScan::CoarseQuantized cq{nprobe};
|
|
324
326
|
search_dispatch_implem(n, x, k, distances, labels, cq, context);
|
|
325
327
|
}
|
|
@@ -393,7 +395,7 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
|
|
|
393
395
|
const FastScanDistancePostProcessing&) const {
|
|
394
396
|
const size_t dim12 = ksub * M;
|
|
395
397
|
const size_t ip_dim12 = aq->M * ksub;
|
|
396
|
-
const size_t
|
|
398
|
+
const size_t cq_nprobe = cq.nprobe;
|
|
397
399
|
|
|
398
400
|
dis_tables.resize(n * dim12);
|
|
399
401
|
|
|
@@ -405,7 +407,7 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
|
|
|
405
407
|
if (by_residual) {
|
|
406
408
|
// bias = coef * <q, c>
|
|
407
409
|
// NOTE: q^2 is not added to `biases`
|
|
408
|
-
biases.resize(n *
|
|
410
|
+
biases.resize(n * cq_nprobe);
|
|
409
411
|
with_simd_level([&]<SIMDLevel SL>() {
|
|
410
412
|
#pragma omp parallel
|
|
411
413
|
{
|
|
@@ -413,8 +415,9 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
|
|
|
413
415
|
float* c = centroid.data();
|
|
414
416
|
|
|
415
417
|
#pragma omp for
|
|
416
|
-
for (idx_t ij = 0; ij < n *
|
|
417
|
-
|
|
418
|
+
for (idx_t ij = 0; ij < static_cast<idx_t>(n * cq_nprobe);
|
|
419
|
+
ij++) {
|
|
420
|
+
idx_t i = ij / cq_nprobe;
|
|
418
421
|
quantizer->reconstruct(cq.ids[ij], c);
|
|
419
422
|
biases[ij] = coef * fvec_inner_product<SL>(c, x + i * d, d);
|
|
420
423
|
}
|
|
@@ -440,7 +443,7 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
|
|
|
440
443
|
|
|
441
444
|
// combine them
|
|
442
445
|
#pragma omp parallel for if (n > 100)
|
|
443
|
-
for (idx_t i = 0; i < n; i++) {
|
|
446
|
+
for (idx_t i = 0; i < static_cast<idx_t>(n); i++) {
|
|
444
447
|
float* tab = dis_tables.data() + i * dim12 + ip_dim12;
|
|
445
448
|
memcpy(tab, norm_lut, norm_dim12 * sizeof(*tab));
|
|
446
449
|
}
|
|
@@ -454,26 +457,26 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
|
|
|
454
457
|
|
|
455
458
|
/********** IndexIVFLocalSearchQuantizerFastScan ************/
|
|
456
459
|
IndexIVFLocalSearchQuantizerFastScan::IndexIVFLocalSearchQuantizerFastScan(
|
|
457
|
-
Index*
|
|
458
|
-
size_t
|
|
459
|
-
size_t
|
|
460
|
-
size_t
|
|
461
|
-
size_t
|
|
460
|
+
Index* quantizer_,
|
|
461
|
+
size_t d_,
|
|
462
|
+
size_t nlist_,
|
|
463
|
+
size_t M_,
|
|
464
|
+
size_t nbits_,
|
|
462
465
|
MetricType metric,
|
|
463
466
|
Search_type_t search_type,
|
|
464
|
-
int
|
|
465
|
-
bool
|
|
467
|
+
int bbs_,
|
|
468
|
+
bool own_invlists_)
|
|
466
469
|
: IndexIVFAdditiveQuantizerFastScan(
|
|
467
|
-
|
|
470
|
+
quantizer_,
|
|
468
471
|
nullptr,
|
|
469
|
-
|
|
470
|
-
|
|
472
|
+
d_,
|
|
473
|
+
nlist_,
|
|
471
474
|
metric,
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
lsq(
|
|
475
|
-
FAISS_THROW_IF_NOT(
|
|
476
|
-
init(&lsq,
|
|
475
|
+
bbs_,
|
|
476
|
+
own_invlists_),
|
|
477
|
+
lsq(d_, M_, nbits_, search_type) {
|
|
478
|
+
FAISS_THROW_IF_NOT(nbits_ == 4);
|
|
479
|
+
init(&lsq, nlist_, metric, bbs_, own_invlists_);
|
|
477
480
|
}
|
|
478
481
|
|
|
479
482
|
IndexIVFLocalSearchQuantizerFastScan::IndexIVFLocalSearchQuantizerFastScan() {
|
|
@@ -482,26 +485,26 @@ IndexIVFLocalSearchQuantizerFastScan::IndexIVFLocalSearchQuantizerFastScan() {
|
|
|
482
485
|
|
|
483
486
|
/********** IndexIVFResidualQuantizerFastScan ************/
|
|
484
487
|
IndexIVFResidualQuantizerFastScan::IndexIVFResidualQuantizerFastScan(
|
|
485
|
-
Index*
|
|
486
|
-
size_t
|
|
487
|
-
size_t
|
|
488
|
-
size_t
|
|
489
|
-
size_t
|
|
488
|
+
Index* quantizer_,
|
|
489
|
+
size_t d_,
|
|
490
|
+
size_t nlist_,
|
|
491
|
+
size_t M_,
|
|
492
|
+
size_t nbits_,
|
|
490
493
|
MetricType metric,
|
|
491
494
|
Search_type_t search_type,
|
|
492
|
-
int
|
|
493
|
-
bool
|
|
495
|
+
int bbs_,
|
|
496
|
+
bool own_invlists_)
|
|
494
497
|
: IndexIVFAdditiveQuantizerFastScan(
|
|
495
|
-
|
|
498
|
+
quantizer_,
|
|
496
499
|
nullptr,
|
|
497
|
-
|
|
498
|
-
|
|
500
|
+
d_,
|
|
501
|
+
nlist_,
|
|
499
502
|
metric,
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
rq(
|
|
503
|
-
FAISS_THROW_IF_NOT(
|
|
504
|
-
init(&rq,
|
|
503
|
+
bbs_,
|
|
504
|
+
own_invlists_),
|
|
505
|
+
rq(d_, M_, nbits_, search_type) {
|
|
506
|
+
FAISS_THROW_IF_NOT(nbits_ == 4);
|
|
507
|
+
init(&rq, nlist_, metric, bbs_, own_invlists_);
|
|
505
508
|
}
|
|
506
509
|
|
|
507
510
|
IndexIVFResidualQuantizerFastScan::IndexIVFResidualQuantizerFastScan() {
|
|
@@ -511,27 +514,27 @@ IndexIVFResidualQuantizerFastScan::IndexIVFResidualQuantizerFastScan() {
|
|
|
511
514
|
/********** IndexIVFProductLocalSearchQuantizerFastScan ************/
|
|
512
515
|
IndexIVFProductLocalSearchQuantizerFastScan::
|
|
513
516
|
IndexIVFProductLocalSearchQuantizerFastScan(
|
|
514
|
-
Index*
|
|
515
|
-
size_t
|
|
516
|
-
size_t
|
|
517
|
+
Index* quantizer_,
|
|
518
|
+
size_t d_,
|
|
519
|
+
size_t nlist_,
|
|
517
520
|
size_t nsplits,
|
|
518
521
|
size_t Msub,
|
|
519
|
-
size_t
|
|
522
|
+
size_t nbits_,
|
|
520
523
|
MetricType metric,
|
|
521
524
|
Search_type_t search_type,
|
|
522
|
-
int
|
|
523
|
-
bool
|
|
525
|
+
int bbs_,
|
|
526
|
+
bool own_invlists_)
|
|
524
527
|
: IndexIVFAdditiveQuantizerFastScan(
|
|
525
|
-
|
|
528
|
+
quantizer_,
|
|
526
529
|
nullptr,
|
|
527
|
-
|
|
528
|
-
|
|
530
|
+
d_,
|
|
531
|
+
nlist_,
|
|
529
532
|
metric,
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
plsq(
|
|
533
|
-
FAISS_THROW_IF_NOT(
|
|
534
|
-
init(&plsq,
|
|
533
|
+
bbs_,
|
|
534
|
+
own_invlists_),
|
|
535
|
+
plsq(d_, nsplits, Msub, nbits_, search_type) {
|
|
536
|
+
FAISS_THROW_IF_NOT(nbits_ == 4);
|
|
537
|
+
init(&plsq, nlist_, metric, bbs_, own_invlists_);
|
|
535
538
|
}
|
|
536
539
|
|
|
537
540
|
IndexIVFProductLocalSearchQuantizerFastScan::
|
|
@@ -542,27 +545,27 @@ IndexIVFProductLocalSearchQuantizerFastScan::
|
|
|
542
545
|
/********** IndexIVFProductResidualQuantizerFastScan ************/
|
|
543
546
|
IndexIVFProductResidualQuantizerFastScan::
|
|
544
547
|
IndexIVFProductResidualQuantizerFastScan(
|
|
545
|
-
Index*
|
|
546
|
-
size_t
|
|
547
|
-
size_t
|
|
548
|
+
Index* quantizer_,
|
|
549
|
+
size_t d_,
|
|
550
|
+
size_t nlist_,
|
|
548
551
|
size_t nsplits,
|
|
549
552
|
size_t Msub,
|
|
550
|
-
size_t
|
|
553
|
+
size_t nbits_,
|
|
551
554
|
MetricType metric,
|
|
552
555
|
Search_type_t search_type,
|
|
553
|
-
int
|
|
554
|
-
bool
|
|
556
|
+
int bbs_,
|
|
557
|
+
bool own_invlists_)
|
|
555
558
|
: IndexIVFAdditiveQuantizerFastScan(
|
|
556
|
-
|
|
559
|
+
quantizer_,
|
|
557
560
|
nullptr,
|
|
558
|
-
|
|
559
|
-
|
|
561
|
+
d_,
|
|
562
|
+
nlist_,
|
|
560
563
|
metric,
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
prq(
|
|
564
|
-
FAISS_THROW_IF_NOT(
|
|
565
|
-
init(&prq,
|
|
564
|
+
bbs_,
|
|
565
|
+
own_invlists_),
|
|
566
|
+
prq(d_, nsplits, Msub, nbits_, search_type) {
|
|
567
|
+
FAISS_THROW_IF_NOT(nbits_ == 4);
|
|
568
|
+
init(&prq, nlist_, metric, bbs_, own_invlists_);
|
|
566
569
|
}
|
|
567
570
|
|
|
568
571
|
IndexIVFProductResidualQuantizerFastScan::
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
#include <faiss/IndexIVFAdditiveQuantizer.h>
|
|
13
13
|
#include <faiss/IndexIVFFastScan.h>
|
|
14
14
|
#include <faiss/impl/AdditiveQuantizer.h>
|
|
15
|
-
#include <faiss/impl/FastScanDistancePostProcessing.h>
|
|
16
15
|
#include <faiss/impl/ProductAdditiveQuantizer.h>
|
|
16
|
+
#include <faiss/impl/fast_scan/FastScanDistancePostProcessing.h>
|
|
17
17
|
#include <faiss/utils/AlignedTable.h>
|
|
18
18
|
|
|
19
19
|
namespace faiss {
|
|
@@ -70,6 +70,9 @@ struct IndexIVFAdditiveQuantizerFastScan : IndexIVFFastScan {
|
|
|
70
70
|
const IndexIVFAdditiveQuantizer& orig,
|
|
71
71
|
int bbs = 32);
|
|
72
72
|
|
|
73
|
+
/// Packed code size: M2 / 2 bytes (4-bit AQ sub-quantizer nibbles)
|
|
74
|
+
size_t fast_scan_code_size() const override;
|
|
75
|
+
|
|
73
76
|
void train_encoder(idx_t n, const float* x, const idx_t* assign) override;
|
|
74
77
|
|
|
75
78
|
idx_t train_encoder_num_vectors() const override;
|