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
|
@@ -134,9 +134,9 @@ void fvec_argsort(size_t n, const float* vals, size_t* perm) {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
void fvec_argsort_parallel(size_t n, const float* vals, size_t* perm) {
|
|
137
|
-
size_t
|
|
137
|
+
std::vector<size_t> perm2(n);
|
|
138
138
|
// 2 result tables, during merging, flip between them
|
|
139
|
-
size_t *permB = perm2, *permA = perm;
|
|
139
|
+
size_t *permB = perm2.data(), *permA = perm;
|
|
140
140
|
|
|
141
141
|
int nt = omp_get_max_threads();
|
|
142
142
|
{ // prepare correct permutation so that the result ends in perm
|
|
@@ -148,8 +148,8 @@ void fvec_argsort_parallel(size_t n, const float* vals, size_t* perm) {
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
#pragma omp parallel
|
|
152
|
-
for (
|
|
151
|
+
#pragma omp parallel for
|
|
152
|
+
for (int64_t i = 0; i < static_cast<int64_t>(n); i++) {
|
|
153
153
|
permA[i] = i;
|
|
154
154
|
}
|
|
155
155
|
|
|
@@ -184,7 +184,6 @@ void fvec_argsort_parallel(size_t n, const float* vals, size_t* perm) {
|
|
|
184
184
|
} else {
|
|
185
185
|
int t0 = s * sub_nt / sub_nseg1;
|
|
186
186
|
int t1 = (s + 1) * sub_nt / sub_nseg1;
|
|
187
|
-
printf("merge %d %d, %d threads\n", s, s + 1, t1 - t0);
|
|
188
187
|
parallel_merge(
|
|
189
188
|
permA, permB, segs[s], segs[s + 1], t1 - t0, comp);
|
|
190
189
|
}
|
|
@@ -197,7 +196,6 @@ void fvec_argsort_parallel(size_t n, const float* vals, size_t* perm) {
|
|
|
197
196
|
}
|
|
198
197
|
assert(permA == perm);
|
|
199
198
|
omp_set_nested(prev_nested);
|
|
200
|
-
delete[] perm2;
|
|
201
199
|
}
|
|
202
200
|
|
|
203
201
|
/*****************************************************************************
|
|
@@ -226,7 +224,7 @@ void bucket_sort_ref(
|
|
|
226
224
|
for (size_t i = 0; i < vmax; i++) {
|
|
227
225
|
lims[i + 1] += lims[i];
|
|
228
226
|
}
|
|
229
|
-
FAISS_THROW_IF_NOT(lims[vmax] == nval);
|
|
227
|
+
FAISS_THROW_IF_NOT(static_cast<size_t>(lims[vmax]) == nval);
|
|
230
228
|
double t2 = getmillisecs();
|
|
231
229
|
// populate buckets
|
|
232
230
|
for (size_t i = 0; i < nval; i++) {
|
|
@@ -286,7 +284,7 @@ void bucket_sort_parallel(
|
|
|
286
284
|
for (size_t i = 0; i < vmax; i++) {
|
|
287
285
|
lims[i + 1] += lims[i];
|
|
288
286
|
}
|
|
289
|
-
FAISS_THROW_IF_NOT(lims[vmax] == nval);
|
|
287
|
+
FAISS_THROW_IF_NOT(static_cast<size_t>(lims[vmax]) == nval);
|
|
290
288
|
}
|
|
291
289
|
#pragma omp barrier
|
|
292
290
|
|
|
@@ -341,7 +339,8 @@ void bucket_sort_inplace_ref(
|
|
|
341
339
|
double t0 = getmillisecs();
|
|
342
340
|
size_t nval = nrow * ncol;
|
|
343
341
|
FAISS_THROW_IF_NOT(
|
|
344
|
-
nbucket <
|
|
342
|
+
static_cast<size_t>(nbucket) <
|
|
343
|
+
nval); // unclear what would happen in this case...
|
|
345
344
|
|
|
346
345
|
memset(lims, 0, sizeof(*lims) * (nbucket + 1));
|
|
347
346
|
for (size_t i = 0; i < nval; i++) {
|
|
@@ -350,14 +349,14 @@ void bucket_sort_inplace_ref(
|
|
|
350
349
|
}
|
|
351
350
|
double t1 = getmillisecs();
|
|
352
351
|
// compute cumulative sum
|
|
353
|
-
for (size_t i = 0; i < nbucket; i++) {
|
|
352
|
+
for (size_t i = 0; i < static_cast<size_t>(nbucket); i++) {
|
|
354
353
|
lims[i + 1] += lims[i];
|
|
355
354
|
}
|
|
356
|
-
FAISS_THROW_IF_NOT(lims[nbucket] == nval);
|
|
355
|
+
FAISS_THROW_IF_NOT(static_cast<size_t>(lims[nbucket]) == nval);
|
|
357
356
|
double t2 = getmillisecs();
|
|
358
357
|
|
|
359
358
|
std::vector<size_t> ptrs(nbucket);
|
|
360
|
-
for (size_t i = 0; i < nbucket; i++) {
|
|
359
|
+
for (size_t i = 0; i < static_cast<size_t>(nbucket); i++) {
|
|
361
360
|
ptrs[i] = lims[i];
|
|
362
361
|
}
|
|
363
362
|
|
|
@@ -378,7 +377,8 @@ void bucket_sort_inplace_ref(
|
|
|
378
377
|
} else {
|
|
379
378
|
// start new loop
|
|
380
379
|
for (; init_bucket_no < nbucket; init_bucket_no++) {
|
|
381
|
-
if (ptrs[init_bucket_no] <
|
|
380
|
+
if (ptrs[init_bucket_no] <
|
|
381
|
+
static_cast<size_t>(lims[init_bucket_no + 1])) {
|
|
382
382
|
break;
|
|
383
383
|
}
|
|
384
384
|
}
|
|
@@ -390,7 +390,7 @@ void bucket_sort_inplace_ref(
|
|
|
390
390
|
}
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
-
for (size_t i = 0; i < nbucket; i++) {
|
|
393
|
+
for (size_t i = 0; i < static_cast<size_t>(nbucket); i++) {
|
|
394
394
|
assert(ptrs[i] == lims[i + 1]);
|
|
395
395
|
}
|
|
396
396
|
double t3 = getmillisecs();
|
|
@@ -407,8 +407,8 @@ struct ToWrite {
|
|
|
407
407
|
std::vector<TI> rows;
|
|
408
408
|
std::vector<size_t> lims;
|
|
409
409
|
|
|
410
|
-
explicit ToWrite(TI
|
|
411
|
-
lims.resize(
|
|
410
|
+
explicit ToWrite(TI nbucket_in) : nbucket(nbucket_in) {
|
|
411
|
+
lims.resize(nbucket_in + 1);
|
|
412
412
|
}
|
|
413
413
|
|
|
414
414
|
/// add one element (row) to write in bucket b
|
|
@@ -428,7 +428,7 @@ struct ToWrite {
|
|
|
428
428
|
lims[buckets[i] + 1]++;
|
|
429
429
|
}
|
|
430
430
|
// compute cumulative sum
|
|
431
|
-
for (size_t i = 0; i < nbucket; i++) {
|
|
431
|
+
for (size_t i = 0; i < static_cast<size_t>(nbucket); i++) {
|
|
432
432
|
lims[i + 1] += lims[i];
|
|
433
433
|
}
|
|
434
434
|
FAISS_THROW_IF_NOT(lims[nbucket] == buckets.size());
|
|
@@ -466,7 +466,8 @@ void bucket_sort_inplace_parallel(
|
|
|
466
466
|
std::vector<ToWrite<TI>> all_to_write;
|
|
467
467
|
size_t nval = nrow * ncol;
|
|
468
468
|
FAISS_THROW_IF_NOT(
|
|
469
|
-
nbucket <
|
|
469
|
+
static_cast<size_t>(nbucket) <
|
|
470
|
+
nval); // unclear what would happen in this case...
|
|
470
471
|
|
|
471
472
|
// try to keep size of all_to_write < 5GiB
|
|
472
473
|
// but we need at least one element per bucket
|
|
@@ -498,7 +499,7 @@ void bucket_sort_inplace_parallel(
|
|
|
498
499
|
}
|
|
499
500
|
#pragma omp critical
|
|
500
501
|
{ // accumulate histograms (not shifted indices to prepare cumsum)
|
|
501
|
-
for (size_t i = 0; i < nbucket; i++) {
|
|
502
|
+
for (size_t i = 0; i < static_cast<size_t>(nbucket); i++) {
|
|
502
503
|
lims[i + 1] += local_lims[i];
|
|
503
504
|
}
|
|
504
505
|
all_to_write.push_back(ToWrite<TI>(nbucket));
|
|
@@ -511,10 +512,10 @@ void bucket_sort_inplace_parallel(
|
|
|
511
512
|
#pragma omp master
|
|
512
513
|
{
|
|
513
514
|
// compute cumulative sum
|
|
514
|
-
for (size_t i = 0; i < nbucket; i++) {
|
|
515
|
+
for (size_t i = 0; i < static_cast<size_t>(nbucket); i++) {
|
|
515
516
|
lims[i + 1] += lims[i];
|
|
516
517
|
}
|
|
517
|
-
FAISS_THROW_IF_NOT(lims[nbucket] == nval);
|
|
518
|
+
FAISS_THROW_IF_NOT(static_cast<size_t>(lims[nbucket]) == nval);
|
|
518
519
|
// at this point lims is final (read only!)
|
|
519
520
|
|
|
520
521
|
memcpy(ptrs.data(), lims, sizeof(lims[0]) * nbucket);
|
|
@@ -559,19 +560,22 @@ void bucket_sort_inplace_parallel(
|
|
|
559
560
|
printf("ROUND %d n_to_write=%zd\n", round, n_to_write);
|
|
560
561
|
}
|
|
561
562
|
if (verbose > 2) {
|
|
562
|
-
for (size_t b = 0; b < nbucket; b++) {
|
|
563
|
+
for (size_t b = 0; b < static_cast<size_t>(nbucket); b++) {
|
|
563
564
|
printf(" b=%zd [", b);
|
|
564
|
-
for (size_t i =
|
|
565
|
+
for (size_t i = static_cast<size_t>(lims[b]);
|
|
566
|
+
i < static_cast<size_t>(lims[b + 1]);
|
|
567
|
+
i++) {
|
|
565
568
|
printf(" %s%d",
|
|
566
569
|
ptrs[b] == i ? ">" : "",
|
|
567
570
|
int(vals[i]));
|
|
568
571
|
}
|
|
569
572
|
printf(" %s] %s\n",
|
|
570
|
-
ptrs[b] == lims[b + 1] ? ">"
|
|
573
|
+
ptrs[b] == static_cast<size_t>(lims[b + 1]) ? ">"
|
|
574
|
+
: "",
|
|
571
575
|
did_wrap[b] ? "w" : "");
|
|
572
576
|
}
|
|
573
577
|
printf("To write\n");
|
|
574
|
-
for (size_t b = 0; b < nbucket; b++) {
|
|
578
|
+
for (size_t b = 0; b < static_cast<size_t>(nbucket); b++) {
|
|
575
579
|
printf(" b=%zd ", b);
|
|
576
580
|
const char* sep = "[";
|
|
577
581
|
for (const ToWrite<TI>& to_write_2 : all_to_write) {
|
|
@@ -609,7 +613,7 @@ void bucket_sort_inplace_parallel(
|
|
|
609
613
|
rank,
|
|
610
614
|
idx);
|
|
611
615
|
}
|
|
612
|
-
if (idx < lims[b + 1]) {
|
|
616
|
+
if (idx < static_cast<size_t>(lims[b + 1])) {
|
|
613
617
|
ptrs[b]++;
|
|
614
618
|
} else {
|
|
615
619
|
// wrapping around
|
|
@@ -709,7 +713,7 @@ inline int64_t hash_function(int64_t x) {
|
|
|
709
713
|
void hashtable_int64_to_int64_init(int log2_capacity, int64_t* tab) {
|
|
710
714
|
size_t capacity = (size_t)1 << log2_capacity;
|
|
711
715
|
#pragma omp parallel for
|
|
712
|
-
for (int64_t i = 0; i < capacity; i++) {
|
|
716
|
+
for (int64_t i = 0; i < static_cast<int64_t>(capacity); i++) {
|
|
713
717
|
tab[2 * i] = -1;
|
|
714
718
|
tab[2 * i + 1] = -1;
|
|
715
719
|
}
|
|
@@ -729,7 +733,7 @@ void hashtable_int64_to_int64_add(
|
|
|
729
733
|
size_t nbucket = (size_t)1 << log2_nbucket;
|
|
730
734
|
|
|
731
735
|
#pragma omp parallel for
|
|
732
|
-
for (int64_t i = 0; i < n; i++) {
|
|
736
|
+
for (int64_t i = 0; i < static_cast<int64_t>(n); i++) {
|
|
733
737
|
hk[i] = hash_function(keys[i]) & mask;
|
|
734
738
|
bucket_no[i] = hk[i] >> (log2_capacity - log2_nbucket);
|
|
735
739
|
}
|
|
@@ -746,11 +750,13 @@ void hashtable_int64_to_int64_add(
|
|
|
746
750
|
|
|
747
751
|
int num_errors = 0;
|
|
748
752
|
#pragma omp parallel for reduction(+ : num_errors)
|
|
749
|
-
for (int64_t bucket = 0; bucket < nbucket; bucket++) {
|
|
753
|
+
for (int64_t bucket = 0; bucket < static_cast<int64_t>(nbucket); bucket++) {
|
|
750
754
|
size_t k0 = bucket << (log2_capacity - log2_nbucket);
|
|
751
755
|
size_t k1 = (bucket + 1) << (log2_capacity - log2_nbucket);
|
|
752
756
|
|
|
753
|
-
for (size_t i =
|
|
757
|
+
for (size_t i = static_cast<size_t>(lims[bucket]);
|
|
758
|
+
i < static_cast<size_t>(lims[bucket + 1]);
|
|
759
|
+
i++) {
|
|
754
760
|
int64_t j = perm[i];
|
|
755
761
|
assert(bucket_no[j] == bucket);
|
|
756
762
|
assert(hk[j] >= k0 && hk[j] < k1);
|
|
@@ -768,7 +774,8 @@ void hashtable_int64_to_int64_add(
|
|
|
768
774
|
if (slot == k1) {
|
|
769
775
|
slot = k0;
|
|
770
776
|
}
|
|
771
|
-
if (slot ==
|
|
777
|
+
if (slot ==
|
|
778
|
+
static_cast<size_t>(hk[j])) { // no free slot left in bucket
|
|
772
779
|
num_errors++;
|
|
773
780
|
break;
|
|
774
781
|
}
|
|
@@ -793,20 +800,24 @@ void hashtable_int64_to_int64_lookup(
|
|
|
793
800
|
int log2_nbucket = log2_capacity_to_log2_nbucket(log2_capacity);
|
|
794
801
|
|
|
795
802
|
#pragma omp parallel for
|
|
796
|
-
for (int64_t i = 0; i < n; i++) {
|
|
803
|
+
for (int64_t i = 0; i < static_cast<int64_t>(n); i++) {
|
|
797
804
|
int64_t k = keys[i];
|
|
798
|
-
int64_t
|
|
799
|
-
size_t slot =
|
|
805
|
+
int64_t hk_i = hash_function(k) & mask;
|
|
806
|
+
size_t slot = hk_i;
|
|
800
807
|
|
|
801
808
|
if (tab[2 * slot] == -1) { // not in table
|
|
802
809
|
vals[i] = -1;
|
|
803
810
|
} else if (tab[2 * slot] == k) { // found!
|
|
804
811
|
vals[i] = tab[2 * slot + 1];
|
|
805
812
|
} else { // need to search in [k0, k1)
|
|
806
|
-
size_t bucket =
|
|
813
|
+
size_t bucket = hk_i >> (log2_capacity - log2_nbucket);
|
|
807
814
|
size_t k0 = bucket << (log2_capacity - log2_nbucket);
|
|
808
815
|
size_t k1 = (bucket + 1) << (log2_capacity - log2_nbucket);
|
|
809
816
|
for (;;) {
|
|
817
|
+
if (tab[slot * 2] == -1) { // empty slot, key not in table
|
|
818
|
+
vals[i] = -1;
|
|
819
|
+
break;
|
|
820
|
+
}
|
|
810
821
|
if (tab[slot * 2] == k) { // found!
|
|
811
822
|
vals[i] = tab[2 * slot + 1];
|
|
812
823
|
break;
|
|
@@ -815,7 +826,8 @@ void hashtable_int64_to_int64_lookup(
|
|
|
815
826
|
if (slot == k1) {
|
|
816
827
|
slot = k0;
|
|
817
828
|
}
|
|
818
|
-
if (slot ==
|
|
829
|
+
if (slot ==
|
|
830
|
+
static_cast<size_t>(hk_i)) { // bucket is full and not found
|
|
819
831
|
vals[i] = -1;
|
|
820
832
|
break;
|
|
821
833
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
// -*- c++ -*-
|
|
9
9
|
|
|
10
10
|
#include <faiss/Index.h>
|
|
11
|
+
#include <faiss/utils/simd_levels.h>
|
|
11
12
|
#include <faiss/utils/utils.h>
|
|
12
13
|
|
|
13
14
|
#include <cassert>
|
|
@@ -115,16 +116,22 @@ std::string get_compile_options() {
|
|
|
115
116
|
options += "OPTIMIZE ";
|
|
116
117
|
#endif
|
|
117
118
|
|
|
118
|
-
#ifdef
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
#ifdef FAISS_ENABLE_DD
|
|
120
|
+
// Dynamic Dispatch mode: report DD and all available SIMD levels
|
|
121
|
+
options += "DD ";
|
|
122
|
+
int supported = SIMDConfig::supported_simd_levels;
|
|
123
|
+
for (int i = 0; i < static_cast<int>(SIMDLevel::COUNT); ++i) {
|
|
124
|
+
auto level = static_cast<SIMDLevel>(i);
|
|
125
|
+
if ((supported & (1 << i)) && level != SIMDLevel::NONE) {
|
|
126
|
+
options += to_string(level) + " ";
|
|
127
|
+
}
|
|
128
|
+
}
|
|
126
129
|
#else
|
|
127
|
-
|
|
130
|
+
// Static mode: report the compiled-in SIMD level
|
|
131
|
+
SIMDLevel level = SIMDConfig::get_level();
|
|
132
|
+
if (level != SIMDLevel::NONE) {
|
|
133
|
+
options += to_string(level) + " ";
|
|
134
|
+
}
|
|
128
135
|
#endif
|
|
129
136
|
|
|
130
137
|
#ifdef FAISS_ENABLE_SVS
|
|
@@ -180,7 +187,7 @@ size_t get_mem_usage_kb() {
|
|
|
180
187
|
char buf[256];
|
|
181
188
|
if (!fgets(buf, 256, f))
|
|
182
189
|
break;
|
|
183
|
-
if (sscanf(buf, "VmRSS: %
|
|
190
|
+
if (sscanf(buf, "VmRSS: %zu kB", &sz) == 1)
|
|
184
191
|
break;
|
|
185
192
|
}
|
|
186
193
|
fclose(f);
|
|
@@ -300,7 +307,7 @@ size_t merge_result_table_with(
|
|
|
300
307
|
std::vector<float> tmpD(k);
|
|
301
308
|
|
|
302
309
|
#pragma omp for
|
|
303
|
-
for (int64_t i = 0; i < n; i++) {
|
|
310
|
+
for (int64_t i = 0; i < static_cast<int64_t>(n); i++) {
|
|
304
311
|
int64_t* lI0 = I0 + i * k;
|
|
305
312
|
float* lD0 = D0 + i * k;
|
|
306
313
|
const int64_t* lI1 = I1 + i * k;
|
|
@@ -430,10 +437,10 @@ void bincode_hist(size_t n, size_t nbits, const uint8_t* codes, int* hist) {
|
|
|
430
437
|
std::vector<int> accu(d * 256);
|
|
431
438
|
const uint8_t* c = codes;
|
|
432
439
|
for (size_t i = 0; i < n; i++)
|
|
433
|
-
for (
|
|
440
|
+
for (size_t j = 0; j < d; j++)
|
|
434
441
|
accu[j * 256 + *c++]++;
|
|
435
442
|
memset(hist, 0, sizeof(*hist) * nbits);
|
|
436
|
-
for (
|
|
443
|
+
for (size_t i = 0; i < d; i++) {
|
|
437
444
|
const int* ai = accu.data() + i * 256;
|
|
438
445
|
int* hi = hist + i * 8;
|
|
439
446
|
for (int j = 0; j < 256; j++)
|
|
@@ -493,7 +500,7 @@ const float* fvecs_maybe_subsample(
|
|
|
493
500
|
std::vector<int> subset(*n);
|
|
494
501
|
rand_perm(subset.data(), *n, seed);
|
|
495
502
|
float* x_subset = new float[n2 * d];
|
|
496
|
-
for (int64_t i = 0; i < n2; i++)
|
|
503
|
+
for (int64_t i = 0; i < static_cast<int64_t>(n2); i++)
|
|
497
504
|
memcpy(&x_subset[i * d], &x[subset[i] * size_t(d)], sizeof(x[0]) * d);
|
|
498
505
|
*n = n2;
|
|
499
506
|
return x_subset;
|
|
@@ -172,8 +172,8 @@ struct CombinerRangeKNN {
|
|
|
172
172
|
T r2; /// range search radius
|
|
173
173
|
bool keep_max; /// whether to keep max values instead of min.
|
|
174
174
|
|
|
175
|
-
CombinerRangeKNN(int64_t
|
|
176
|
-
: nq(
|
|
175
|
+
CombinerRangeKNN(int64_t nq_in, size_t k_in, T r2_in, bool keep_max_in)
|
|
176
|
+
: nq(nq_in), k(k_in), r2(r2_in), keep_max(keep_max_in) {}
|
|
177
177
|
|
|
178
178
|
/// Knn search results
|
|
179
179
|
const int64_t* I = nullptr; /// size nq * k
|
|
@@ -200,7 +200,7 @@ struct CodeSet {
|
|
|
200
200
|
size_t d;
|
|
201
201
|
std::set<std::vector<uint8_t>> s;
|
|
202
202
|
|
|
203
|
-
explicit CodeSet(size_t
|
|
203
|
+
explicit CodeSet(size_t d_in) : d(d_in) {}
|
|
204
204
|
void insert(size_t n, const uint8_t* codes, bool* inserted);
|
|
205
205
|
};
|
|
206
206
|
|