faiss 0.5.3 → 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 +12 -0
- data/ext/faiss/ext.cpp +1 -1
- data/ext/faiss/extconf.rb +4 -4
- data/ext/faiss/index.cpp +63 -45
- data/ext/faiss/index_binary.cpp +37 -27
- data/ext/faiss/kmeans.cpp +9 -8
- data/ext/faiss/pca_matrix.cpp +9 -7
- data/ext/faiss/product_quantizer.cpp +13 -11
- data/ext/faiss/utils.cpp +4 -2
- data/ext/faiss/utils.h +4 -0
- data/lib/faiss/version.rb +1 -1
- data/lib/faiss.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +214 -82
- data/vendor/faiss/faiss/AutoTune.h +14 -1
- data/vendor/faiss/faiss/Clustering.cpp +97 -249
- data/vendor/faiss/faiss/Clustering.h +18 -0
- data/vendor/faiss/faiss/IVFlib.cpp +67 -44
- data/vendor/faiss/faiss/Index.cpp +25 -12
- data/vendor/faiss/faiss/Index.h +26 -4
- data/vendor/faiss/faiss/Index2Layer.cpp +37 -53
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +68 -61
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +36 -34
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +4 -1
- data/vendor/faiss/faiss/IndexBinary.cpp +6 -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 +92 -95
- 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 +120 -414
- data/vendor/faiss/faiss/IndexFastScan.cpp +105 -129
- data/vendor/faiss/faiss/IndexFastScan.h +35 -24
- data/vendor/faiss/faiss/IndexFlat.cpp +216 -152
- data/vendor/faiss/faiss/IndexFlat.h +32 -14
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +88 -41
- data/vendor/faiss/faiss/IndexFlatCodes.h +7 -1
- data/vendor/faiss/faiss/IndexHNSW.cpp +299 -187
- data/vendor/faiss/faiss/IndexHNSW.h +30 -14
- data/vendor/faiss/faiss/IndexIDMap.cpp +26 -22
- data/vendor/faiss/faiss/IndexIDMap.h +9 -7
- data/vendor/faiss/faiss/IndexIVF.cpp +535 -405
- data/vendor/faiss/faiss/IndexIVF.h +47 -16
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +77 -74
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +105 -99
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +6 -3
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +379 -249
- data/vendor/faiss/faiss/IndexIVFFastScan.h +65 -60
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +41 -124
- data/vendor/faiss/faiss/IndexIVFFlat.h +32 -0
- data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +89 -138
- data/vendor/faiss/faiss/IndexIVFFlatPanorama.h +3 -1
- data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +18 -15
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +77 -907
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +184 -122
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +3 -0
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +23 -18
- data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +59 -60
- data/vendor/faiss/faiss/IndexIVFRaBitQ.h +4 -3
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +564 -416
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +269 -111
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +41 -127
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +1 -1
- data/vendor/faiss/faiss/IndexLSH.cpp +44 -25
- data/vendor/faiss/faiss/IndexLattice.cpp +41 -36
- data/vendor/faiss/faiss/IndexNNDescent.cpp +37 -21
- data/vendor/faiss/faiss/IndexNNDescent.h +2 -2
- data/vendor/faiss/faiss/IndexNSG.cpp +40 -23
- data/vendor/faiss/faiss/IndexNSG.h +0 -2
- data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +32 -12
- data/vendor/faiss/faiss/IndexPQ.cpp +129 -213
- 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 +31 -43
- data/vendor/faiss/faiss/IndexRaBitQ.h +4 -3
- data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +135 -317
- data/vendor/faiss/faiss/IndexRaBitQFastScan.h +192 -34
- data/vendor/faiss/faiss/IndexRefine.cpp +30 -55
- 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 +13 -13
- 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 +29 -6
- data/vendor/faiss/faiss/SuperKMeans.cpp +656 -0
- data/vendor/faiss/faiss/SuperKMeans.h +97 -0
- data/vendor/faiss/faiss/VectorTransform.cpp +349 -141
- data/vendor/faiss/faiss/VectorTransform.h +39 -16
- data/vendor/faiss/faiss/build.cpp +23 -0
- data/vendor/faiss/faiss/build.h +15 -0
- data/vendor/faiss/faiss/clone_index.cpp +55 -51
- 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/{cppcontrib/factory_tools.cpp → factory_tools.cpp} +6 -1
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +1 -1
- 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 +64 -34
- 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 -28
- 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 +367 -0
- data/vendor/faiss/faiss/impl/ClusteringInitialization.h +107 -0
- data/vendor/faiss/faiss/impl/CodePacker.cpp +7 -3
- data/vendor/faiss/faiss/impl/CodePacker.h +11 -3
- data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +83 -0
- data/vendor/faiss/faiss/impl/CodePackerRaBitQ.h +47 -0
- data/vendor/faiss/faiss/impl/DistanceComputer.h +8 -8
- data/vendor/faiss/faiss/impl/FaissAssert.h +64 -3
- data/vendor/faiss/faiss/impl/FaissException.h +50 -3
- data/vendor/faiss/faiss/impl/HNSW.cpp +117 -351
- data/vendor/faiss/faiss/impl/HNSW.h +21 -40
- 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 +114 -102
- data/vendor/faiss/faiss/impl/NNDescent.cpp +63 -26
- data/vendor/faiss/faiss/impl/NNDescent.h +6 -2
- data/vendor/faiss/faiss/impl/NSG.cpp +44 -26
- data/vendor/faiss/faiss/impl/NSG.h +20 -10
- data/vendor/faiss/faiss/impl/Panorama.cpp +76 -52
- data/vendor/faiss/faiss/impl/Panorama.h +265 -78
- 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 +62 -37
- 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 +99 -80
- data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
- data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +135 -37
- data/vendor/faiss/faiss/impl/RaBitQUtils.h +148 -21
- data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +298 -301
- data/vendor/faiss/faiss/impl/RaBitQuantizer.h +3 -10
- data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.cpp +15 -41
- data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.h +0 -4
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +40 -32
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
- data/vendor/faiss/faiss/impl/ResultHandler.h +218 -113
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +119 -2362
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +27 -3
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +14 -11
- data/vendor/faiss/faiss/impl/VisitedTable.cpp +42 -0
- data/vendor/faiss/faiss/impl/VisitedTable.h +76 -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 +163 -0
- 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} +176 -4
- 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 -348
- 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} +290 -142
- 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 +1950 -505
- data/vendor/faiss/faiss/impl/index_read_utils.h +1 -2
- data/vendor/faiss/faiss/impl/index_write.cpp +112 -21
- 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 +81 -40
- data/vendor/faiss/faiss/impl/lattice_Zn.h +6 -6
- data/vendor/faiss/faiss/impl/mapped_io.cpp +15 -8
- 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/{code_distance/code_distance-avx2.h → pq_code_distance/pq_code_distance-avx2.h} +43 -220
- data/vendor/faiss/faiss/impl/{code_distance/code_distance-avx512.h → pq_code_distance/pq_code_distance-avx512.h} +25 -112
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +59 -0
- 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 +256 -0
- data/vendor/faiss/faiss/impl/{code_distance/code_distance-sve.h → pq_code_distance/pq_code_distance-sve.cpp} +57 -146
- data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +68 -0
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +320 -483
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +121 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +137 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +371 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +190 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +94 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +603 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +597 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +388 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +630 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +311 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +387 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +54 -0
- data/vendor/faiss/faiss/impl/simd_dispatch.h +173 -0
- data/vendor/faiss/faiss/impl/simdlib/simdlib.h +57 -0
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_avx2.h +274 -171
- 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 +275 -217
- 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 +115 -28
- data/vendor/faiss/faiss/index_io.h +53 -3
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +73 -20
- 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 +14 -14
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +9 -19
- data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +2 -2
- data/vendor/faiss/faiss/svs/IndexSVSFlat.h +2 -0
- 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 +19 -2
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +19 -2
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +14 -0
- data/vendor/faiss/faiss/utils/Heap.cpp +56 -10
- data/vendor/faiss/faiss/utils/Heap.h +21 -0
- data/vendor/faiss/faiss/utils/NeuralNet.cpp +54 -40
- 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 +507 -559
- data/vendor/faiss/faiss/utils/distances.h +118 -1
- data/vendor/faiss/faiss/utils/distances_dispatch.h +250 -0
- 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 +72 -3681
- data/vendor/faiss/faiss/utils/extra_distances.cpp +60 -102
- data/vendor/faiss/faiss/utils/extra_distances.h +79 -7
- 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 +251 -0
- 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 +124 -343
- 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 +154 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +777 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +306 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +1431 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +1095 -0
- 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 +392 -0
- 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 +334 -0
- data/vendor/faiss/faiss/utils/simd_levels.h +183 -0
- data/vendor/faiss/faiss/utils/sorting.cpp +48 -36
- data/vendor/faiss/faiss/utils/utils.cpp +21 -14
- data/vendor/faiss/faiss/utils/utils.h +3 -3
- metadata +156 -42
- data/vendor/faiss/faiss/impl/RaBitQStats.cpp +0 -29
- data/vendor/faiss/faiss/impl/RaBitQStats.h +0 -56
- data/vendor/faiss/faiss/impl/code_distance/code_distance-generic.h +0 -81
- data/vendor/faiss/faiss/impl/code_distance/code_distance.h +0 -186
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +0 -216
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +0 -224
- 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 -228
- 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 -450
- 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 -296
- /data/vendor/faiss/faiss/{cppcontrib/factory_tools.h → factory_tools.h} +0 -0
|
@@ -14,9 +14,9 @@
|
|
|
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/
|
|
17
|
+
#include <faiss/impl/fast_scan/FastScanDistancePostProcessing.h>
|
|
18
|
+
#include <faiss/impl/fast_scan/fast_scan.h>
|
|
19
|
+
#include <faiss/impl/simd_dispatch.h>
|
|
20
20
|
#include <faiss/invlists/BlockInvertedLists.h>
|
|
21
21
|
#include <faiss/utils/distances.h>
|
|
22
22
|
#include <faiss/utils/quantize_lut.h>
|
|
@@ -29,46 +29,46 @@ inline size_t roundup(size_t a, size_t b) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan(
|
|
32
|
-
Index*
|
|
33
|
-
AdditiveQuantizer*
|
|
34
|
-
size_t
|
|
35
|
-
size_t
|
|
32
|
+
Index* quantizer_,
|
|
33
|
+
AdditiveQuantizer* aq_,
|
|
34
|
+
size_t d_,
|
|
35
|
+
size_t nlist_,
|
|
36
36
|
MetricType metric,
|
|
37
|
-
int
|
|
38
|
-
bool
|
|
39
|
-
: IndexIVFFastScan(
|
|
40
|
-
if (
|
|
41
|
-
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_);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
void IndexIVFAdditiveQuantizerFastScan::init(
|
|
46
|
-
AdditiveQuantizer*
|
|
47
|
-
size_t
|
|
46
|
+
AdditiveQuantizer* aq_,
|
|
47
|
+
size_t nlist_,
|
|
48
48
|
MetricType metric,
|
|
49
|
-
int
|
|
50
|
-
bool
|
|
51
|
-
FAISS_THROW_IF_NOT(
|
|
52
|
-
FAISS_THROW_IF_NOT(!
|
|
53
|
-
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);
|
|
54
54
|
if (metric == METRIC_INNER_PRODUCT) {
|
|
55
55
|
FAISS_THROW_IF_NOT_MSG(
|
|
56
|
-
|
|
56
|
+
aq_->search_type == AdditiveQuantizer::ST_LUT_nonorm,
|
|
57
57
|
"Search type must be ST_LUT_nonorm for IP metric");
|
|
58
58
|
} else {
|
|
59
59
|
FAISS_THROW_IF_NOT_MSG(
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
aq_->search_type == AdditiveQuantizer::ST_norm_lsq2x4 ||
|
|
61
|
+
aq_->search_type == AdditiveQuantizer::ST_norm_rq2x4,
|
|
62
62
|
"Search type must be lsq2x4 or rq2x4 for L2 metric");
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
this->aq =
|
|
65
|
+
this->aq = aq_;
|
|
66
66
|
if (metric_type == METRIC_L2) {
|
|
67
|
-
M =
|
|
67
|
+
M = aq_->M + 2; // 2x4 bits AQ
|
|
68
68
|
} else {
|
|
69
|
-
M =
|
|
69
|
+
M = aq_->M;
|
|
70
70
|
}
|
|
71
|
-
init_fastscan(
|
|
71
|
+
init_fastscan(aq_, M, 4, nlist_, metric, bbs_, own_invlists_);
|
|
72
72
|
|
|
73
73
|
max_train_points = 1024 * ksub * M;
|
|
74
74
|
by_residual = true;
|
|
@@ -76,7 +76,7 @@ void IndexIVFAdditiveQuantizerFastScan::init(
|
|
|
76
76
|
|
|
77
77
|
IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan(
|
|
78
78
|
const IndexIVFAdditiveQuantizer& orig,
|
|
79
|
-
int
|
|
79
|
+
int bbs_)
|
|
80
80
|
: IndexIVFFastScan(
|
|
81
81
|
orig.quantizer,
|
|
82
82
|
orig.d,
|
|
@@ -88,7 +88,7 @@ IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan(
|
|
|
88
88
|
FAISS_THROW_IF_NOT(
|
|
89
89
|
metric_type == METRIC_INNER_PRODUCT || !orig.by_residual);
|
|
90
90
|
|
|
91
|
-
init(aq, nlist, metric_type,
|
|
91
|
+
init(aq, nlist, metric_type, bbs_, own_invlists);
|
|
92
92
|
|
|
93
93
|
is_trained = orig.is_trained;
|
|
94
94
|
ntotal = orig.ntotal;
|
|
@@ -129,6 +129,10 @@ IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan() {
|
|
|
129
129
|
IndexIVFAdditiveQuantizerFastScan::~IndexIVFAdditiveQuantizerFastScan() =
|
|
130
130
|
default;
|
|
131
131
|
|
|
132
|
+
size_t IndexIVFAdditiveQuantizerFastScan::fast_scan_code_size() const {
|
|
133
|
+
return M2 / 2;
|
|
134
|
+
}
|
|
135
|
+
|
|
132
136
|
/*********************************************************
|
|
133
137
|
* Training
|
|
134
138
|
*********************************************************/
|
|
@@ -316,9 +320,8 @@ void IndexIVFAdditiveQuantizerFastScan::search(
|
|
|
316
320
|
return;
|
|
317
321
|
}
|
|
318
322
|
|
|
319
|
-
NormTableScaler scaler(norm_scale);
|
|
320
323
|
FastScanDistancePostProcessing context;
|
|
321
|
-
context.
|
|
324
|
+
context.pq2x4_scale = norm_scale;
|
|
322
325
|
IndexIVFFastScan::CoarseQuantized cq{nprobe};
|
|
323
326
|
search_dispatch_implem(n, x, k, distances, labels, cq, context);
|
|
324
327
|
}
|
|
@@ -392,7 +395,7 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
|
|
|
392
395
|
const FastScanDistancePostProcessing&) const {
|
|
393
396
|
const size_t dim12 = ksub * M;
|
|
394
397
|
const size_t ip_dim12 = aq->M * ksub;
|
|
395
|
-
const size_t
|
|
398
|
+
const size_t cq_nprobe = cq.nprobe;
|
|
396
399
|
|
|
397
400
|
dis_tables.resize(n * dim12);
|
|
398
401
|
|
|
@@ -404,19 +407,22 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
|
|
|
404
407
|
if (by_residual) {
|
|
405
408
|
// bias = coef * <q, c>
|
|
406
409
|
// NOTE: q^2 is not added to `biases`
|
|
407
|
-
biases.resize(n *
|
|
410
|
+
biases.resize(n * cq_nprobe);
|
|
411
|
+
with_simd_level([&]<SIMDLevel SL>() {
|
|
408
412
|
#pragma omp parallel
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
413
|
+
{
|
|
414
|
+
std::vector<float> centroid(d);
|
|
415
|
+
float* c = centroid.data();
|
|
412
416
|
|
|
413
417
|
#pragma omp for
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
+
for (idx_t ij = 0; ij < static_cast<idx_t>(n * cq_nprobe);
|
|
419
|
+
ij++) {
|
|
420
|
+
idx_t i = ij / cq_nprobe;
|
|
421
|
+
quantizer->reconstruct(cq.ids[ij], c);
|
|
422
|
+
biases[ij] = coef * fvec_inner_product<SL>(c, x + i * d, d);
|
|
423
|
+
}
|
|
418
424
|
}
|
|
419
|
-
}
|
|
425
|
+
});
|
|
420
426
|
}
|
|
421
427
|
|
|
422
428
|
if (metric_type == METRIC_L2) {
|
|
@@ -437,7 +443,7 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
|
|
|
437
443
|
|
|
438
444
|
// combine them
|
|
439
445
|
#pragma omp parallel for if (n > 100)
|
|
440
|
-
for (idx_t i = 0; i < n; i++) {
|
|
446
|
+
for (idx_t i = 0; i < static_cast<idx_t>(n); i++) {
|
|
441
447
|
float* tab = dis_tables.data() + i * dim12 + ip_dim12;
|
|
442
448
|
memcpy(tab, norm_lut, norm_dim12 * sizeof(*tab));
|
|
443
449
|
}
|
|
@@ -451,26 +457,26 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
|
|
|
451
457
|
|
|
452
458
|
/********** IndexIVFLocalSearchQuantizerFastScan ************/
|
|
453
459
|
IndexIVFLocalSearchQuantizerFastScan::IndexIVFLocalSearchQuantizerFastScan(
|
|
454
|
-
Index*
|
|
455
|
-
size_t
|
|
456
|
-
size_t
|
|
457
|
-
size_t
|
|
458
|
-
size_t
|
|
460
|
+
Index* quantizer_,
|
|
461
|
+
size_t d_,
|
|
462
|
+
size_t nlist_,
|
|
463
|
+
size_t M_,
|
|
464
|
+
size_t nbits_,
|
|
459
465
|
MetricType metric,
|
|
460
466
|
Search_type_t search_type,
|
|
461
|
-
int
|
|
462
|
-
bool
|
|
467
|
+
int bbs_,
|
|
468
|
+
bool own_invlists_)
|
|
463
469
|
: IndexIVFAdditiveQuantizerFastScan(
|
|
464
|
-
|
|
470
|
+
quantizer_,
|
|
465
471
|
nullptr,
|
|
466
|
-
|
|
467
|
-
|
|
472
|
+
d_,
|
|
473
|
+
nlist_,
|
|
468
474
|
metric,
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
lsq(
|
|
472
|
-
FAISS_THROW_IF_NOT(
|
|
473
|
-
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_);
|
|
474
480
|
}
|
|
475
481
|
|
|
476
482
|
IndexIVFLocalSearchQuantizerFastScan::IndexIVFLocalSearchQuantizerFastScan() {
|
|
@@ -479,26 +485,26 @@ IndexIVFLocalSearchQuantizerFastScan::IndexIVFLocalSearchQuantizerFastScan() {
|
|
|
479
485
|
|
|
480
486
|
/********** IndexIVFResidualQuantizerFastScan ************/
|
|
481
487
|
IndexIVFResidualQuantizerFastScan::IndexIVFResidualQuantizerFastScan(
|
|
482
|
-
Index*
|
|
483
|
-
size_t
|
|
484
|
-
size_t
|
|
485
|
-
size_t
|
|
486
|
-
size_t
|
|
488
|
+
Index* quantizer_,
|
|
489
|
+
size_t d_,
|
|
490
|
+
size_t nlist_,
|
|
491
|
+
size_t M_,
|
|
492
|
+
size_t nbits_,
|
|
487
493
|
MetricType metric,
|
|
488
494
|
Search_type_t search_type,
|
|
489
|
-
int
|
|
490
|
-
bool
|
|
495
|
+
int bbs_,
|
|
496
|
+
bool own_invlists_)
|
|
491
497
|
: IndexIVFAdditiveQuantizerFastScan(
|
|
492
|
-
|
|
498
|
+
quantizer_,
|
|
493
499
|
nullptr,
|
|
494
|
-
|
|
495
|
-
|
|
500
|
+
d_,
|
|
501
|
+
nlist_,
|
|
496
502
|
metric,
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
rq(
|
|
500
|
-
FAISS_THROW_IF_NOT(
|
|
501
|
-
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_);
|
|
502
508
|
}
|
|
503
509
|
|
|
504
510
|
IndexIVFResidualQuantizerFastScan::IndexIVFResidualQuantizerFastScan() {
|
|
@@ -508,27 +514,27 @@ IndexIVFResidualQuantizerFastScan::IndexIVFResidualQuantizerFastScan() {
|
|
|
508
514
|
/********** IndexIVFProductLocalSearchQuantizerFastScan ************/
|
|
509
515
|
IndexIVFProductLocalSearchQuantizerFastScan::
|
|
510
516
|
IndexIVFProductLocalSearchQuantizerFastScan(
|
|
511
|
-
Index*
|
|
512
|
-
size_t
|
|
513
|
-
size_t
|
|
517
|
+
Index* quantizer_,
|
|
518
|
+
size_t d_,
|
|
519
|
+
size_t nlist_,
|
|
514
520
|
size_t nsplits,
|
|
515
521
|
size_t Msub,
|
|
516
|
-
size_t
|
|
522
|
+
size_t nbits_,
|
|
517
523
|
MetricType metric,
|
|
518
524
|
Search_type_t search_type,
|
|
519
|
-
int
|
|
520
|
-
bool
|
|
525
|
+
int bbs_,
|
|
526
|
+
bool own_invlists_)
|
|
521
527
|
: IndexIVFAdditiveQuantizerFastScan(
|
|
522
|
-
|
|
528
|
+
quantizer_,
|
|
523
529
|
nullptr,
|
|
524
|
-
|
|
525
|
-
|
|
530
|
+
d_,
|
|
531
|
+
nlist_,
|
|
526
532
|
metric,
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
plsq(
|
|
530
|
-
FAISS_THROW_IF_NOT(
|
|
531
|
-
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_);
|
|
532
538
|
}
|
|
533
539
|
|
|
534
540
|
IndexIVFProductLocalSearchQuantizerFastScan::
|
|
@@ -539,27 +545,27 @@ IndexIVFProductLocalSearchQuantizerFastScan::
|
|
|
539
545
|
/********** IndexIVFProductResidualQuantizerFastScan ************/
|
|
540
546
|
IndexIVFProductResidualQuantizerFastScan::
|
|
541
547
|
IndexIVFProductResidualQuantizerFastScan(
|
|
542
|
-
Index*
|
|
543
|
-
size_t
|
|
544
|
-
size_t
|
|
548
|
+
Index* quantizer_,
|
|
549
|
+
size_t d_,
|
|
550
|
+
size_t nlist_,
|
|
545
551
|
size_t nsplits,
|
|
546
552
|
size_t Msub,
|
|
547
|
-
size_t
|
|
553
|
+
size_t nbits_,
|
|
548
554
|
MetricType metric,
|
|
549
555
|
Search_type_t search_type,
|
|
550
|
-
int
|
|
551
|
-
bool
|
|
556
|
+
int bbs_,
|
|
557
|
+
bool own_invlists_)
|
|
552
558
|
: IndexIVFAdditiveQuantizerFastScan(
|
|
553
|
-
|
|
559
|
+
quantizer_,
|
|
554
560
|
nullptr,
|
|
555
|
-
|
|
556
|
-
|
|
561
|
+
d_,
|
|
562
|
+
nlist_,
|
|
557
563
|
metric,
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
prq(
|
|
561
|
-
FAISS_THROW_IF_NOT(
|
|
562
|
-
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_);
|
|
563
569
|
}
|
|
564
570
|
|
|
565
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 {
|
|
@@ -37,13 +37,13 @@ namespace faiss {
|
|
|
37
37
|
struct IndexIVFAdditiveQuantizerFastScan : IndexIVFFastScan {
|
|
38
38
|
using Search_type_t = AdditiveQuantizer::Search_type_t;
|
|
39
39
|
|
|
40
|
-
AdditiveQuantizer* aq;
|
|
40
|
+
AdditiveQuantizer* aq{};
|
|
41
41
|
|
|
42
42
|
bool rescale_norm = false;
|
|
43
43
|
int norm_scale = 1;
|
|
44
44
|
|
|
45
45
|
// max number of training vectors
|
|
46
|
-
size_t max_train_points;
|
|
46
|
+
size_t max_train_points{};
|
|
47
47
|
|
|
48
48
|
IndexIVFAdditiveQuantizerFastScan(
|
|
49
49
|
Index* quantizer,
|
|
@@ -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;
|