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
|
@@ -7,14 +7,15 @@
|
|
|
7
7
|
|
|
8
8
|
// -*- c++ -*-
|
|
9
9
|
|
|
10
|
+
#include <faiss/utils/distances_dispatch.h>
|
|
10
11
|
#include <faiss/utils/extra_distances.h>
|
|
11
12
|
|
|
12
13
|
#include <omp.h>
|
|
13
14
|
#include <algorithm>
|
|
14
|
-
#include <cmath>
|
|
15
15
|
|
|
16
16
|
#include <faiss/impl/AuxIndexStructures.h>
|
|
17
17
|
#include <faiss/impl/DistanceComputer.h>
|
|
18
|
+
#include <faiss/impl/IDSelector.h>
|
|
18
19
|
#include <faiss/utils/utils.h>
|
|
19
20
|
|
|
20
21
|
namespace faiss {
|
|
@@ -25,78 +26,6 @@ namespace faiss {
|
|
|
25
26
|
|
|
26
27
|
namespace {
|
|
27
28
|
|
|
28
|
-
struct Run_pairwise_extra_distances {
|
|
29
|
-
using T = void;
|
|
30
|
-
|
|
31
|
-
template <class VD>
|
|
32
|
-
void f(VD vd,
|
|
33
|
-
int64_t nq,
|
|
34
|
-
const float* xq,
|
|
35
|
-
int64_t nb,
|
|
36
|
-
const float* xb,
|
|
37
|
-
float* dis,
|
|
38
|
-
int64_t ldq,
|
|
39
|
-
int64_t ldb,
|
|
40
|
-
int64_t ldd) {
|
|
41
|
-
#pragma omp parallel for if (nq > 10)
|
|
42
|
-
for (int64_t i = 0; i < nq; i++) {
|
|
43
|
-
const float* xqi = xq + i * ldq;
|
|
44
|
-
const float* xbj = xb;
|
|
45
|
-
float* disi = dis + ldd * i;
|
|
46
|
-
|
|
47
|
-
for (int64_t j = 0; j < nb; j++) {
|
|
48
|
-
disi[j] = vd(xqi, xbj);
|
|
49
|
-
xbj += ldb;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
struct Run_knn_extra_metrics {
|
|
56
|
-
using T = void;
|
|
57
|
-
template <class VD>
|
|
58
|
-
void f(VD vd,
|
|
59
|
-
const float* x,
|
|
60
|
-
const float* y,
|
|
61
|
-
size_t nx,
|
|
62
|
-
size_t ny,
|
|
63
|
-
size_t k,
|
|
64
|
-
float* distances,
|
|
65
|
-
int64_t* labels) {
|
|
66
|
-
size_t d = vd.d;
|
|
67
|
-
using C = typename VD::C;
|
|
68
|
-
size_t check_period = InterruptCallback::get_period_hint(ny * d);
|
|
69
|
-
check_period *= omp_get_max_threads();
|
|
70
|
-
|
|
71
|
-
for (size_t i0 = 0; i0 < nx; i0 += check_period) {
|
|
72
|
-
size_t i1 = std::min(i0 + check_period, nx);
|
|
73
|
-
|
|
74
|
-
#pragma omp parallel for
|
|
75
|
-
for (int64_t i = i0; i < i1; i++) {
|
|
76
|
-
const float* x_i = x + i * d;
|
|
77
|
-
const float* y_j = y;
|
|
78
|
-
size_t j;
|
|
79
|
-
float* simi = distances + k * i;
|
|
80
|
-
int64_t* idxi = labels + k * i;
|
|
81
|
-
|
|
82
|
-
// maxheap_heapify(k, simi, idxi);
|
|
83
|
-
heap_heapify<C>(k, simi, idxi);
|
|
84
|
-
for (j = 0; j < ny; j++) {
|
|
85
|
-
float disij = vd(x_i, y_j);
|
|
86
|
-
|
|
87
|
-
if (C::cmp(simi[0], disij)) {
|
|
88
|
-
heap_replace_top<C>(k, simi, idxi, disij, j);
|
|
89
|
-
}
|
|
90
|
-
y_j += d;
|
|
91
|
-
}
|
|
92
|
-
// maxheap_reorder(k, simi, idxi);
|
|
93
|
-
heap_reorder<C>(k, simi, idxi);
|
|
94
|
-
}
|
|
95
|
-
InterruptCallback::check();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
|
|
100
29
|
template <class VD>
|
|
101
30
|
struct ExtraDistanceComputer : FlatCodesDistanceComputer {
|
|
102
31
|
VD vd;
|
|
@@ -113,14 +42,14 @@ struct ExtraDistanceComputer : FlatCodesDistanceComputer {
|
|
|
113
42
|
}
|
|
114
43
|
|
|
115
44
|
ExtraDistanceComputer(
|
|
116
|
-
const VD&
|
|
45
|
+
const VD& vd_in,
|
|
117
46
|
const float* xb,
|
|
118
|
-
size_t
|
|
119
|
-
const float*
|
|
120
|
-
: FlatCodesDistanceComputer((uint8_t*)xb,
|
|
121
|
-
vd(
|
|
122
|
-
nb(
|
|
123
|
-
q(
|
|
47
|
+
size_t nb_in,
|
|
48
|
+
const float* q_in = nullptr)
|
|
49
|
+
: FlatCodesDistanceComputer((uint8_t*)xb, vd_in.d * sizeof(float)),
|
|
50
|
+
vd(vd_in),
|
|
51
|
+
nb(nb_in),
|
|
52
|
+
q(q_in),
|
|
124
53
|
b(xb) {}
|
|
125
54
|
|
|
126
55
|
void set_query(const float* x) override {
|
|
@@ -128,19 +57,6 @@ struct ExtraDistanceComputer : FlatCodesDistanceComputer {
|
|
|
128
57
|
}
|
|
129
58
|
};
|
|
130
59
|
|
|
131
|
-
struct Run_get_distance_computer {
|
|
132
|
-
using T = FlatCodesDistanceComputer*;
|
|
133
|
-
|
|
134
|
-
template <class VD>
|
|
135
|
-
FlatCodesDistanceComputer* f(
|
|
136
|
-
VD vd,
|
|
137
|
-
const float* xb,
|
|
138
|
-
size_t nb,
|
|
139
|
-
const float* q = nullptr) {
|
|
140
|
-
return new ExtraDistanceComputer<VD>(vd, xb, nb, q);
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
|
|
144
60
|
} // anonymous namespace
|
|
145
61
|
|
|
146
62
|
void pairwise_extra_distances(
|
|
@@ -168,9 +84,19 @@ void pairwise_extra_distances(
|
|
|
168
84
|
ldd = nb;
|
|
169
85
|
}
|
|
170
86
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
87
|
+
with_VectorDistance(d, mt, metric_arg, [&](auto vd) {
|
|
88
|
+
#pragma omp parallel for if (nq > 10)
|
|
89
|
+
for (int64_t i = 0; i < nq; i++) {
|
|
90
|
+
const float* xqi = xq + i * ldq;
|
|
91
|
+
const float* xbj = xb;
|
|
92
|
+
float* disi = dis + ldd * i;
|
|
93
|
+
|
|
94
|
+
for (int64_t j = 0; j < nb; j++) {
|
|
95
|
+
disi[j] = vd(xqi, xbj);
|
|
96
|
+
xbj += ldb;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
174
100
|
}
|
|
175
101
|
|
|
176
102
|
void knn_extra_metrics(
|
|
@@ -183,10 +109,40 @@ void knn_extra_metrics(
|
|
|
183
109
|
float metric_arg,
|
|
184
110
|
size_t k,
|
|
185
111
|
float* distances,
|
|
186
|
-
int64_t* indexes
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
112
|
+
int64_t* indexes,
|
|
113
|
+
const IDSelector* sel) {
|
|
114
|
+
with_VectorDistance(d, mt, metric_arg, [&](auto vd) {
|
|
115
|
+
using C = typename decltype(vd)::C;
|
|
116
|
+
size_t check_period = InterruptCallback::get_period_hint(ny * d);
|
|
117
|
+
check_period *= omp_get_max_threads();
|
|
118
|
+
|
|
119
|
+
for (size_t i0 = 0; i0 < nx; i0 += check_period) {
|
|
120
|
+
size_t i1 = std::min(i0 + check_period, nx);
|
|
121
|
+
|
|
122
|
+
#pragma omp parallel for
|
|
123
|
+
for (int64_t i = i0; i < static_cast<int64_t>(i1); i++) {
|
|
124
|
+
const float* x_i = x + i * d;
|
|
125
|
+
const float* y_j = y;
|
|
126
|
+
size_t j;
|
|
127
|
+
float* simi = distances + k * i;
|
|
128
|
+
int64_t* idxi = indexes + k * i;
|
|
129
|
+
|
|
130
|
+
heap_heapify<C>(k, simi, idxi);
|
|
131
|
+
for (j = 0; j < ny; j++) {
|
|
132
|
+
if (!sel || sel->is_member(j)) {
|
|
133
|
+
float disij = vd(x_i, y_j);
|
|
134
|
+
|
|
135
|
+
if (C::cmp(simi[0], disij)) {
|
|
136
|
+
heap_replace_top<C>(k, simi, idxi, disij, j);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
y_j += d;
|
|
140
|
+
}
|
|
141
|
+
heap_reorder<C>(k, simi, idxi);
|
|
142
|
+
}
|
|
143
|
+
InterruptCallback::check();
|
|
144
|
+
}
|
|
145
|
+
});
|
|
190
146
|
}
|
|
191
147
|
|
|
192
148
|
FlatCodesDistanceComputer* get_extra_distance_computer(
|
|
@@ -195,8 +151,10 @@ FlatCodesDistanceComputer* get_extra_distance_computer(
|
|
|
195
151
|
float metric_arg,
|
|
196
152
|
size_t nb,
|
|
197
153
|
const float* xb) {
|
|
198
|
-
|
|
199
|
-
|
|
154
|
+
return with_VectorDistance(
|
|
155
|
+
d, mt, metric_arg, [&](auto vd) -> FlatCodesDistanceComputer* {
|
|
156
|
+
return new ExtraDistanceComputer<decltype(vd)>(vd, xb, nb);
|
|
157
|
+
});
|
|
200
158
|
}
|
|
201
159
|
|
|
202
160
|
} // namespace faiss
|
|
@@ -10,11 +10,13 @@
|
|
|
10
10
|
/** In this file are the implementations of extra metrics beyond L2
|
|
11
11
|
* and inner product */
|
|
12
12
|
|
|
13
|
-
#include <
|
|
13
|
+
#include <cstdint>
|
|
14
14
|
|
|
15
|
-
#include <faiss/
|
|
16
|
-
|
|
17
|
-
#include <faiss/
|
|
15
|
+
#include <faiss/MetricType.h>
|
|
16
|
+
#include <faiss/impl/FaissAssert.h>
|
|
17
|
+
#include <faiss/impl/IDSelector.h>
|
|
18
|
+
#include <faiss/utils/ordered_key_value.h>
|
|
19
|
+
#include <faiss/utils/simd_levels.h>
|
|
18
20
|
|
|
19
21
|
namespace faiss {
|
|
20
22
|
|
|
@@ -43,7 +45,8 @@ void knn_extra_metrics(
|
|
|
43
45
|
float metric_arg,
|
|
44
46
|
size_t k,
|
|
45
47
|
float* distances,
|
|
46
|
-
int64_t* indexes
|
|
48
|
+
int64_t* indexes,
|
|
49
|
+
const IDSelector* sel = nullptr);
|
|
47
50
|
|
|
48
51
|
/** get a DistanceComputer that refers to this type of distance and
|
|
49
52
|
* indexes a flat array of size nb */
|
|
@@ -54,6 +57,75 @@ FlatCodesDistanceComputer* get_extra_distance_computer(
|
|
|
54
57
|
size_t nb,
|
|
55
58
|
const float* xb);
|
|
56
59
|
|
|
57
|
-
|
|
60
|
+
/// Dispatch to a lambda with MetricType as a compile-time constant.
|
|
61
|
+
/// This allows writing generic code that works with different metrics
|
|
62
|
+
/// while maintaining compile-time optimization.
|
|
63
|
+
///
|
|
64
|
+
/// Example usage:
|
|
65
|
+
/// auto result = with_metric_type(runtime_metric, [&](auto metric_tag) {
|
|
66
|
+
/// constexpr MetricType M = decltype(metric_tag)::value;
|
|
67
|
+
/// return compute_distance<M>(x, y);
|
|
68
|
+
/// });
|
|
69
|
+
#ifndef SWIG
|
|
70
|
+
|
|
71
|
+
template <typename LambdaType>
|
|
72
|
+
inline auto with_metric_type(MetricType metric, LambdaType&& action) {
|
|
73
|
+
switch (metric) {
|
|
74
|
+
case METRIC_INNER_PRODUCT:
|
|
75
|
+
return action.template operator()<METRIC_INNER_PRODUCT>();
|
|
76
|
+
case METRIC_L2:
|
|
77
|
+
return action.template operator()<METRIC_L2>();
|
|
78
|
+
case METRIC_L1:
|
|
79
|
+
return action.template operator()<METRIC_L1>();
|
|
80
|
+
case METRIC_Linf:
|
|
81
|
+
return action.template operator()<METRIC_Linf>();
|
|
82
|
+
case METRIC_Lp:
|
|
83
|
+
return action.template operator()<METRIC_Lp>();
|
|
84
|
+
case METRIC_Canberra:
|
|
85
|
+
return action.template operator()<METRIC_Canberra>();
|
|
86
|
+
case METRIC_BrayCurtis:
|
|
87
|
+
return action.template operator()<METRIC_BrayCurtis>();
|
|
88
|
+
case METRIC_JensenShannon:
|
|
89
|
+
return action.template operator()<METRIC_JensenShannon>();
|
|
90
|
+
case METRIC_Jaccard:
|
|
91
|
+
return action.template operator()<METRIC_Jaccard>();
|
|
92
|
+
case METRIC_NaNEuclidean:
|
|
93
|
+
return action.template operator()<METRIC_NaNEuclidean>();
|
|
94
|
+
case METRIC_GOWER:
|
|
95
|
+
return action.template operator()<METRIC_GOWER>();
|
|
96
|
+
default:
|
|
97
|
+
FAISS_THROW_FMT(
|
|
98
|
+
"with_metric_type called with unknown metric %d",
|
|
99
|
+
int(metric));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
#endif // SWIG
|
|
103
|
+
|
|
104
|
+
#ifndef SWIG
|
|
105
|
+
|
|
106
|
+
/***************************************************************************
|
|
107
|
+
* VectorDistance base class - contains common data members and type defs
|
|
108
|
+
* VectorDistance struct template - specializations for each metric type
|
|
109
|
+
**************************************************************************/
|
|
110
|
+
|
|
111
|
+
template <MetricType mt, SIMDLevel level>
|
|
112
|
+
struct VectorDistance {
|
|
113
|
+
size_t d;
|
|
114
|
+
float metric_arg;
|
|
58
115
|
|
|
59
|
-
|
|
116
|
+
VectorDistance(size_t d, float metric_arg) : d(d), metric_arg(metric_arg) {}
|
|
117
|
+
|
|
118
|
+
static constexpr MetricType metric = mt;
|
|
119
|
+
static constexpr bool is_similarity = is_similarity_metric(mt);
|
|
120
|
+
|
|
121
|
+
using C = typename std::conditional<
|
|
122
|
+
is_similarity_metric(mt),
|
|
123
|
+
CMin<float, int64_t>,
|
|
124
|
+
CMax<float, int64_t>>::type;
|
|
125
|
+
|
|
126
|
+
float operator()(const float* x, const float* y) const;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
#endif // SWIG
|
|
130
|
+
|
|
131
|
+
} // namespace faiss
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
namespace faiss {
|
|
11
11
|
|
|
12
12
|
// BitstringWriter and BitstringReader functions
|
|
13
|
-
inline BitstringWriter::BitstringWriter(uint8_t*
|
|
14
|
-
: code(
|
|
15
|
-
memset(
|
|
13
|
+
inline BitstringWriter::BitstringWriter(uint8_t* code_in, size_t code_size_in)
|
|
14
|
+
: code(code_in), code_size(code_size_in), i(0) {
|
|
15
|
+
memset(code_in, 0, code_size_in);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
inline void BitstringWriter::write(uint64_t x, int nbit) {
|
|
@@ -36,8 +36,10 @@ inline void BitstringWriter::write(uint64_t x, int nbit) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
inline BitstringReader::BitstringReader(
|
|
40
|
-
|
|
39
|
+
inline BitstringReader::BitstringReader(
|
|
40
|
+
const uint8_t* code_in,
|
|
41
|
+
size_t code_size_in)
|
|
42
|
+
: code(code_in), code_size(code_size_in), i(0) {}
|
|
41
43
|
|
|
42
44
|
inline uint64_t BitstringReader::read(int nbit) {
|
|
43
45
|
assert(code_size * 8 >= nbit + i);
|
|
@@ -85,18 +87,18 @@ struct HCounterState {
|
|
|
85
87
|
int k;
|
|
86
88
|
|
|
87
89
|
HCounterState(
|
|
88
|
-
int*
|
|
89
|
-
int64_t*
|
|
90
|
+
int* counters_in,
|
|
91
|
+
int64_t* ids_per_dis_in,
|
|
90
92
|
const uint8_t* x,
|
|
91
93
|
int d,
|
|
92
|
-
int
|
|
93
|
-
: counters(
|
|
94
|
-
ids_per_dis(
|
|
94
|
+
int k_in)
|
|
95
|
+
: counters(counters_in),
|
|
96
|
+
ids_per_dis(ids_per_dis_in),
|
|
95
97
|
hc(x, d / 8),
|
|
96
98
|
thres(d + 1),
|
|
97
99
|
count_lt(0),
|
|
98
100
|
count_eq(0),
|
|
99
|
-
k(
|
|
101
|
+
k(k_in) {}
|
|
100
102
|
|
|
101
103
|
void update_counter(const uint8_t* y, size_t j) {
|
|
102
104
|
int32_t dis = hc.hamming(y);
|