faiss 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/ext/faiss/extconf.rb +2 -1
- data/ext/faiss/{index_rb.cpp → index.cpp} +1 -1
- data/ext/faiss/index_binary.cpp +1 -1
- data/ext/faiss/kmeans.cpp +1 -1
- data/ext/faiss/pca_matrix.cpp +1 -1
- data/ext/faiss/product_quantizer.cpp +1 -1
- data/ext/faiss/{utils_rb.cpp → utils.cpp} +1 -1
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +93 -80
- data/vendor/faiss/faiss/Clustering.cpp +39 -240
- data/vendor/faiss/faiss/Clustering.h +6 -0
- data/vendor/faiss/faiss/IVFlib.cpp +41 -21
- data/vendor/faiss/faiss/Index.cpp +6 -5
- data/vendor/faiss/faiss/Index.h +5 -5
- data/vendor/faiss/faiss/Index2Layer.cpp +37 -53
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +49 -37
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +36 -34
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +4 -1
- data/vendor/faiss/faiss/IndexBinary.cpp +5 -3
- data/vendor/faiss/faiss/IndexBinary.h +4 -4
- data/vendor/faiss/faiss/IndexBinaryFlat.cpp +1 -1
- data/vendor/faiss/faiss/IndexBinaryFlat.h +1 -1
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -4
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +84 -92
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +9 -3
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +45 -236
- data/vendor/faiss/faiss/IndexBinaryHash.h +6 -6
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +87 -415
- data/vendor/faiss/faiss/IndexFastScan.cpp +72 -109
- data/vendor/faiss/faiss/IndexFastScan.h +25 -23
- data/vendor/faiss/faiss/IndexFlat.cpp +27 -20
- data/vendor/faiss/faiss/IndexFlat.h +21 -18
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +42 -19
- data/vendor/faiss/faiss/IndexHNSW.cpp +283 -145
- data/vendor/faiss/faiss/IndexHNSW.h +16 -2
- data/vendor/faiss/faiss/IndexIDMap.cpp +25 -21
- data/vendor/faiss/faiss/IndexIDMap.h +9 -7
- data/vendor/faiss/faiss/IndexIVF.cpp +465 -362
- data/vendor/faiss/faiss/IndexIVF.h +33 -12
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +77 -74
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +96 -93
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +4 -1
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +357 -238
- data/vendor/faiss/faiss/IndexIVFFastScan.h +42 -41
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +36 -68
- data/vendor/faiss/faiss/IndexIVFFlat.h +32 -0
- data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +53 -30
- data/vendor/faiss/faiss/IndexIVFFlatPanorama.h +3 -1
- data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +18 -15
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +71 -843
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +151 -121
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +3 -0
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +21 -17
- data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +26 -39
- data/vendor/faiss/faiss/IndexIVFRaBitQ.h +2 -1
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +475 -476
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +248 -93
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +41 -127
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +1 -1
- data/vendor/faiss/faiss/IndexLSH.cpp +36 -19
- data/vendor/faiss/faiss/IndexLattice.cpp +13 -13
- data/vendor/faiss/faiss/IndexNNDescent.cpp +36 -21
- data/vendor/faiss/faiss/IndexNNDescent.h +2 -2
- data/vendor/faiss/faiss/IndexNSG.cpp +39 -23
- data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +31 -11
- data/vendor/faiss/faiss/IndexPQ.cpp +128 -221
- data/vendor/faiss/faiss/IndexPQ.h +3 -2
- data/vendor/faiss/faiss/IndexPQFastScan.cpp +20 -14
- data/vendor/faiss/faiss/IndexPQFastScan.h +3 -0
- data/vendor/faiss/faiss/IndexPreTransform.cpp +25 -18
- data/vendor/faiss/faiss/IndexPreTransform.h +1 -1
- data/vendor/faiss/faiss/IndexRaBitQ.cpp +11 -36
- data/vendor/faiss/faiss/IndexRaBitQ.h +2 -1
- data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +41 -277
- data/vendor/faiss/faiss/IndexRaBitQFastScan.h +183 -27
- data/vendor/faiss/faiss/IndexRefine.cpp +30 -25
- data/vendor/faiss/faiss/IndexRefine.h +4 -4
- data/vendor/faiss/faiss/IndexReplicas.cpp +6 -6
- data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +15 -14
- data/vendor/faiss/faiss/IndexRowwiseMinMax.h +1 -1
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +82 -14
- data/vendor/faiss/faiss/IndexShards.cpp +10 -9
- data/vendor/faiss/faiss/IndexShardsIVF.cpp +21 -15
- data/vendor/faiss/faiss/MatrixStats.cpp +5 -4
- data/vendor/faiss/faiss/MetaIndexes.cpp +19 -17
- data/vendor/faiss/faiss/MetaIndexes.h +1 -1
- data/vendor/faiss/faiss/MetricType.h +14 -7
- data/vendor/faiss/faiss/SuperKMeans.cpp +656 -0
- data/vendor/faiss/faiss/SuperKMeans.h +97 -0
- data/vendor/faiss/faiss/VectorTransform.cpp +237 -149
- data/vendor/faiss/faiss/VectorTransform.h +16 -16
- data/vendor/faiss/faiss/build.cpp +23 -0
- data/vendor/faiss/faiss/build.h +15 -0
- data/vendor/faiss/faiss/clone_index.cpp +48 -47
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +47 -47
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +11 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +38 -38
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +11 -0
- data/vendor/faiss/faiss/factory_tools.cpp +5 -0
- data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +6 -5
- data/vendor/faiss/faiss/gpu/GpuResources.h +1 -1
- data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +9 -9
- data/vendor/faiss/faiss/gpu/StandardGpuResources.h +4 -3
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +46 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +56 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +78 -1
- data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +72 -0
- data/vendor/faiss/faiss/gpu/test/TestUtils.h +23 -0
- data/vendor/faiss/faiss/gpu/utils/CuvsFilterConvert.h +1 -1
- data/vendor/faiss/faiss/gpu/utils/CuvsUtils.h +21 -10
- data/vendor/faiss/faiss/gpu_metal/GpuIndexFlat.h +22 -0
- data/vendor/faiss/faiss/gpu_metal/MetalCloner.h +35 -0
- data/vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h +40 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +51 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h +65 -0
- data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +66 -0
- data/vendor/faiss/faiss/gpu_metal/MetalResources.h +79 -0
- data/vendor/faiss/faiss/gpu_metal/StandardMetalResources.h +35 -0
- data/vendor/faiss/faiss/impl/AdSampling.cpp +103 -0
- data/vendor/faiss/faiss/impl/AdSampling.h +35 -0
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +29 -25
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +1 -0
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +10 -9
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +3 -0
- data/vendor/faiss/faiss/impl/ClusteringHelpers.cpp +244 -0
- data/vendor/faiss/faiss/impl/ClusteringHelpers.h +94 -0
- data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +16 -16
- data/vendor/faiss/faiss/impl/CodePacker.cpp +3 -3
- data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +1 -1
- data/vendor/faiss/faiss/impl/DistanceComputer.h +8 -8
- data/vendor/faiss/faiss/impl/FaissAssert.h +6 -3
- data/vendor/faiss/faiss/impl/FaissException.h +50 -3
- data/vendor/faiss/faiss/impl/HNSW.cpp +92 -317
- data/vendor/faiss/faiss/impl/HNSW.h +13 -34
- data/vendor/faiss/faiss/impl/IDSelector.cpp +15 -11
- data/vendor/faiss/faiss/impl/IDSelector.h +8 -8
- data/vendor/faiss/faiss/impl/InvertedListScannerStats.h +26 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +82 -77
- data/vendor/faiss/faiss/impl/NNDescent.cpp +62 -25
- data/vendor/faiss/faiss/impl/NNDescent.h +6 -2
- data/vendor/faiss/faiss/impl/NSG.cpp +38 -21
- data/vendor/faiss/faiss/impl/NSG.h +4 -4
- data/vendor/faiss/faiss/impl/Panorama.cpp +23 -6
- data/vendor/faiss/faiss/impl/Panorama.h +258 -87
- data/vendor/faiss/faiss/impl/PdxLayout.cpp +93 -0
- data/vendor/faiss/faiss/impl/PdxLayout.h +41 -0
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +46 -32
- data/vendor/faiss/faiss/impl/PolysemousTraining.h +3 -3
- data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +35 -35
- data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +21 -16
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +30 -23
- data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
- data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +55 -49
- data/vendor/faiss/faiss/impl/RaBitQUtils.h +65 -0
- data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +296 -283
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +26 -23
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
- data/vendor/faiss/faiss/impl/ResultHandler.h +99 -75
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +52 -4
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +27 -1
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +14 -11
- data/vendor/faiss/faiss/impl/VisitedTable.h +7 -0
- data/vendor/faiss/faiss/impl/approx_topk/approx_topk.h +276 -0
- data/vendor/faiss/faiss/impl/approx_topk/avx2.cpp +68 -0
- data/vendor/faiss/faiss/{utils → impl}/approx_topk/generic.h +15 -8
- data/vendor/faiss/faiss/impl/approx_topk/neon.cpp +68 -0
- data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h +169 -0
- data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h +117 -0
- data/vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h +146 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h +73 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h +270 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +460 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h +159 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h +92 -0
- data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +26 -0
- data/vendor/faiss/faiss/impl/binary_hamming/avx512.cpp +26 -0
- data/vendor/faiss/faiss/impl/binary_hamming/dispatch.h +143 -0
- data/vendor/faiss/faiss/impl/binary_hamming/neon.cpp +26 -0
- data/vendor/faiss/faiss/impl/binary_hamming/rvv.cpp +26 -0
- data/vendor/faiss/faiss/impl/expanded_scanners.h +8 -3
- data/vendor/faiss/faiss/impl/{FastScanDistancePostProcessing.h → fast_scan/FastScanDistancePostProcessing.h} +13 -6
- data/vendor/faiss/faiss/impl/{LookupTableScaler.h → fast_scan/LookupTableScaler.h} +16 -5
- data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h +237 -0
- data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h +185 -0
- data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +229 -0
- data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +268 -0
- data/vendor/faiss/faiss/impl/{pq4_fast_scan.cpp → fast_scan/fast_scan.cpp} +169 -2
- data/vendor/faiss/faiss/impl/fast_scan/fast_scan.h +341 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp +36 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp +40 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp +120 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp +104 -0
- data/vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h +213 -0
- data/vendor/faiss/faiss/impl/{pq4_fast_scan_search_qbs.cpp → fast_scan/kernels_simd512.h} +26 -356
- data/vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h +90 -0
- data/vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h +108 -0
- data/vendor/faiss/faiss/impl/{simd_result_handlers.h → fast_scan/simd_result_handlers.h} +282 -134
- data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +54 -0
- data/vendor/faiss/faiss/impl/hnsw/LockVector.h +64 -0
- data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp +91 -0
- data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h +64 -0
- data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +104 -0
- data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +111 -0
- data/vendor/faiss/faiss/impl/index_read.cpp +1132 -45
- data/vendor/faiss/faiss/impl/index_read_utils.h +1 -1
- data/vendor/faiss/faiss/impl/index_write.cpp +95 -13
- data/vendor/faiss/faiss/impl/io.cpp +6 -6
- data/vendor/faiss/faiss/impl/io_macros.h +33 -16
- data/vendor/faiss/faiss/impl/kmeans1d.cpp +10 -10
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +37 -23
- data/vendor/faiss/faiss/impl/lattice_Zn.h +6 -6
- data/vendor/faiss/faiss/impl/mapped_io.cpp +6 -6
- data/vendor/faiss/faiss/impl/platform_macros.h +11 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +549 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +245 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h +105 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +106 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +21 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +21 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +21 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx2.cpp → pq_code_distance-avx2.h} +9 -13
- data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx512.cpp → pq_code_distance-avx512.h} +9 -57
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +29 -111
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h +96 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +238 -5
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp +5 -7
- data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +68 -0
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +311 -477
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +1 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +3 -2
- data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +102 -11
- data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +27 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +3 -3
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +148 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +167 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +59 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +163 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +311 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +192 -8
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +12 -0
- data/vendor/faiss/faiss/impl/simd_dispatch.h +100 -66
- data/vendor/faiss/faiss/impl/simdlib/simdlib.h +57 -0
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_avx2.h +264 -172
- data/vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h +414 -0
- data/vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h +44 -0
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_emulated.h +231 -166
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_neon.h +270 -218
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_ppc64.h +201 -160
- data/vendor/faiss/faiss/impl/svs_io.cpp +12 -3
- data/vendor/faiss/faiss/impl/svs_io.h +8 -2
- data/vendor/faiss/faiss/index_factory.cpp +86 -18
- data/vendor/faiss/faiss/index_io.h +24 -0
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +66 -16
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +24 -14
- data/vendor/faiss/faiss/invlists/DirectMap.h +4 -3
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +157 -73
- data/vendor/faiss/faiss/invlists/InvertedLists.h +86 -23
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +4 -4
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +13 -13
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +2 -2
- data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +350 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVF.h +128 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp +40 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h +43 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +225 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h +71 -0
- data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +25 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamana.h +18 -2
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +12 -3
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +7 -2
- data/vendor/faiss/faiss/utils/Heap.cpp +10 -10
- data/vendor/faiss/faiss/utils/NeuralNet.cpp +47 -36
- data/vendor/faiss/faiss/utils/NeuralNet.h +1 -1
- data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +10 -4
- data/vendor/faiss/faiss/utils/distances.cpp +390 -560
- data/vendor/faiss/faiss/utils/distances.h +20 -1
- data/vendor/faiss/faiss/utils/distances_dispatch.h +117 -37
- data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +8 -7
- data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +33 -14
- data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +12 -1
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +16 -293
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp +57 -0
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h +290 -0
- data/vendor/faiss/faiss/utils/distances_simd.cpp +5 -177
- data/vendor/faiss/faiss/utils/extra_distances.cpp +9 -8
- data/vendor/faiss/faiss/utils/extra_distances.h +32 -6
- data/vendor/faiss/faiss/utils/hamming-inl.h +13 -11
- data/vendor/faiss/faiss/utils/hamming.cpp +66 -517
- data/vendor/faiss/faiss/utils/hamming.h +92 -2
- data/vendor/faiss/faiss/utils/hamming_distance/common.h +287 -10
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +15 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp +15 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h +142 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +234 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h +368 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h +322 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h +39 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer.h +146 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h +481 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp +15 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp +15 -0
- data/vendor/faiss/faiss/utils/partitioning.cpp +66 -987
- data/vendor/faiss/faiss/utils/partitioning.h +31 -0
- data/vendor/faiss/faiss/utils/popcount.h +29 -0
- data/vendor/faiss/faiss/utils/pq_code_distance.h +2 -2
- data/vendor/faiss/faiss/utils/prefetch.h +2 -2
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +30 -30
- data/vendor/faiss/faiss/utils/quantize_lut.h +1 -1
- data/vendor/faiss/faiss/utils/rabitq_simd.h +57 -536
- data/vendor/faiss/faiss/utils/random.cpp +6 -6
- data/vendor/faiss/faiss/utils/simd_impl/IVFFlatScanner-inl.h +51 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp +5 -1
- data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +213 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +163 -10
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +250 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +7 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +189 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h +195 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h +2 -1
- data/vendor/faiss/faiss/utils/{distances_fused/simdlib_based.h → simd_impl/exhaustive_L2sqr_blas_cmax.h} +5 -10
- data/vendor/faiss/faiss/utils/simd_impl/hamming_impl.h +481 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp +14 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp +14 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h +1085 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +355 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +477 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +55 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +55 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h +32 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h +43 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp +57 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp +45 -0
- data/vendor/faiss/faiss/utils/simd_levels.cpp +17 -5
- data/vendor/faiss/faiss/utils/simd_levels.h +93 -1
- data/vendor/faiss/faiss/utils/sorting.cpp +48 -36
- data/vendor/faiss/faiss/utils/utils.cpp +5 -5
- data/vendor/faiss/faiss/utils/utils.h +3 -3
- metadata +119 -34
- data/vendor/faiss/faiss/impl/RaBitQStats.cpp +0 -29
- data/vendor/faiss/faiss/impl/RaBitQStats.h +0 -56
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +0 -224
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +0 -230
- data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +0 -84
- data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +0 -196
- data/vendor/faiss/faiss/utils/approx_topk/mode.h +0 -34
- data/vendor/faiss/faiss/utils/distances_fused/avx512.h +0 -36
- data/vendor/faiss/faiss/utils/extra_distances-inl.h +0 -235
- data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +0 -462
- data/vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h +0 -490
- data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +0 -449
- data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +0 -87
- data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +0 -524
- data/vendor/faiss/faiss/utils/simdlib.h +0 -42
- data/vendor/faiss/faiss/utils/simdlib_avx512.h +0 -365
- /data/ext/faiss/{utils_rb.h → utils.h} +0 -0
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
#include <stdio.h>
|
|
12
12
|
|
|
13
13
|
#include <faiss/impl/platform_macros.h>
|
|
14
|
+
#include <faiss/utils/ordered_key_value.h>
|
|
15
|
+
#include <faiss/utils/simd_levels.h>
|
|
14
16
|
|
|
15
17
|
namespace faiss {
|
|
16
18
|
|
|
@@ -58,6 +60,35 @@ void simd_histogram_16(
|
|
|
58
60
|
int shift,
|
|
59
61
|
int* hist);
|
|
60
62
|
|
|
63
|
+
/** SIMD-dispatched partition for aligned uint16_t arrays.
|
|
64
|
+
* Specializations live in per-ISA TUs (partitioning_avx2.cpp, etc.). */
|
|
65
|
+
template <SIMDLevel SL, class C>
|
|
66
|
+
typename C::T partition_fuzzy_simd(
|
|
67
|
+
uint16_t* vals,
|
|
68
|
+
typename C::TI* ids,
|
|
69
|
+
size_t n,
|
|
70
|
+
size_t q_min,
|
|
71
|
+
size_t q_max,
|
|
72
|
+
size_t* q_out);
|
|
73
|
+
|
|
74
|
+
/** SIMD-dispatched histogram functions.
|
|
75
|
+
* Specializations live in per-ISA TUs. */
|
|
76
|
+
template <SIMDLevel SL>
|
|
77
|
+
void simd_histogram_8(
|
|
78
|
+
const uint16_t* data,
|
|
79
|
+
int n,
|
|
80
|
+
uint16_t min,
|
|
81
|
+
int shift,
|
|
82
|
+
int* hist);
|
|
83
|
+
|
|
84
|
+
template <SIMDLevel SL>
|
|
85
|
+
void simd_histogram_16(
|
|
86
|
+
const uint16_t* data,
|
|
87
|
+
int n,
|
|
88
|
+
uint16_t min,
|
|
89
|
+
int shift,
|
|
90
|
+
int* hist);
|
|
91
|
+
|
|
61
92
|
struct PartitionStats {
|
|
62
93
|
uint64_t bisect_cycles;
|
|
63
94
|
uint64_t compress_cycles;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <cstdint>
|
|
11
|
+
|
|
12
|
+
// popcount = count number of 1s in the binary representation of a number
|
|
13
|
+
|
|
14
|
+
#ifdef _MSC_VER
|
|
15
|
+
#include <intrin.h>
|
|
16
|
+
inline int popcount32(uint32_t x) {
|
|
17
|
+
return __popcnt(x);
|
|
18
|
+
}
|
|
19
|
+
inline int popcount64(uint64_t x) {
|
|
20
|
+
return static_cast<int>(__popcnt64(x));
|
|
21
|
+
}
|
|
22
|
+
#else
|
|
23
|
+
inline int popcount32(uint32_t x) {
|
|
24
|
+
return __builtin_popcount(x);
|
|
25
|
+
}
|
|
26
|
+
inline int popcount64(uint64_t x) {
|
|
27
|
+
return __builtin_popcountll(x);
|
|
28
|
+
}
|
|
29
|
+
#endif
|
|
@@ -29,7 +29,7 @@ namespace pq_code_distance {
|
|
|
29
29
|
*
|
|
30
30
|
* PQCodeDistance<PQDecoderT, SL> computes PQ code distances at a given
|
|
31
31
|
* SIMD level. The dispatch site (IndexIVFPQ.cpp, IndexPQ.cpp) uses
|
|
32
|
-
*
|
|
32
|
+
* with_simd_level to select SL at runtime, which instantiates
|
|
33
33
|
* PQCodeDistance for ALL decoder types (PQDecoder8, PQDecoder16,
|
|
34
34
|
* PQDecoderGeneric) at the chosen level.
|
|
35
35
|
*
|
|
@@ -211,7 +211,7 @@ struct PQCodeDistance {
|
|
|
211
211
|
* Non-templated PQ code distance dispatch (PQDecoder8 only).
|
|
212
212
|
*
|
|
213
213
|
* These follow the same pattern as distances.h: the caller does not
|
|
214
|
-
* name a SIMDLevel. Internally they dispatch via
|
|
214
|
+
* name a SIMDLevel. Internally they dispatch via with_simd_level
|
|
215
215
|
* to the best available SIMD implementation (DD: runtime detection,
|
|
216
216
|
* static: compile-time selection). Definitions are in
|
|
217
217
|
* pq_code_distance-generic.cpp.
|
|
@@ -27,7 +27,7 @@ namespace {
|
|
|
27
27
|
// there can be NaNs in tables, they should be ignored
|
|
28
28
|
float tab_min(const float* tab, size_t n) {
|
|
29
29
|
float min = HUGE_VAL;
|
|
30
|
-
for (
|
|
30
|
+
for (size_t i = 0; i < n; i++) {
|
|
31
31
|
if (tab[i] < min) {
|
|
32
32
|
min = tab[i];
|
|
33
33
|
}
|
|
@@ -37,7 +37,7 @@ float tab_min(const float* tab, size_t n) {
|
|
|
37
37
|
|
|
38
38
|
float tab_max(const float* tab, size_t n) {
|
|
39
39
|
float max = -HUGE_VAL;
|
|
40
|
-
for (
|
|
40
|
+
for (size_t i = 0; i < n; i++) {
|
|
41
41
|
if (tab[i] > max) {
|
|
42
42
|
max = tab[i];
|
|
43
43
|
}
|
|
@@ -46,14 +46,14 @@ float tab_max(const float* tab, size_t n) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
void round_tab(float* tab, size_t n, float a, float bi) {
|
|
49
|
-
for (
|
|
49
|
+
for (size_t i = 0; i < n; i++) {
|
|
50
50
|
tab[i] = floorf((tab[i] - bi) * a + 0.5);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
template <typename T>
|
|
55
55
|
void round_tab(const float* tab, size_t n, float a, float bi, T* tab_out) {
|
|
56
|
-
for (
|
|
56
|
+
for (size_t i = 0; i < n; i++) {
|
|
57
57
|
tab_out[i] = (T)floorf((tab[i] - bi) * a + 0.5);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -68,7 +68,7 @@ void round_uint8_per_column(
|
|
|
68
68
|
float* b_out) {
|
|
69
69
|
float max_span = 0;
|
|
70
70
|
std::vector<float> mins(n);
|
|
71
|
-
for (
|
|
71
|
+
for (size_t i = 0; i < n; i++) {
|
|
72
72
|
mins[i] = tab_min(tab + i * d, d);
|
|
73
73
|
float span = tab_max(tab + i * d, d) - mins[i];
|
|
74
74
|
if (span > max_span) {
|
|
@@ -77,7 +77,7 @@ void round_uint8_per_column(
|
|
|
77
77
|
}
|
|
78
78
|
float a = 255 / max_span;
|
|
79
79
|
float b = 0;
|
|
80
|
-
for (
|
|
80
|
+
for (size_t i = 0; i < n; i++) {
|
|
81
81
|
b += mins[i];
|
|
82
82
|
round_tab(tab + i * d, d, a, mins[i]);
|
|
83
83
|
}
|
|
@@ -98,10 +98,10 @@ void round_uint8_per_column_multi(
|
|
|
98
98
|
float* b_out) {
|
|
99
99
|
float max_span = 0;
|
|
100
100
|
std::vector<float> mins(n);
|
|
101
|
-
for (
|
|
101
|
+
for (size_t i = 0; i < n; i++) {
|
|
102
102
|
float min_i = HUGE_VAL;
|
|
103
103
|
float max_i = -HUGE_VAL;
|
|
104
|
-
for (
|
|
104
|
+
for (size_t j = 0; j < m; j++) {
|
|
105
105
|
min_i = std::min(min_i, tab_min(tab + (j * n + i) * d, d));
|
|
106
106
|
max_i = std::max(max_i, tab_max(tab + (j * n + i) * d, d));
|
|
107
107
|
}
|
|
@@ -113,9 +113,9 @@ void round_uint8_per_column_multi(
|
|
|
113
113
|
}
|
|
114
114
|
float a = 255 / max_span;
|
|
115
115
|
float b = 0;
|
|
116
|
-
for (
|
|
116
|
+
for (size_t i = 0; i < n; i++) {
|
|
117
117
|
b += mins[i];
|
|
118
|
-
for (
|
|
118
|
+
for (size_t j = 0; j < m; j++) {
|
|
119
119
|
round_tab(tab + (j * n + i) * d, d, a, mins[i]);
|
|
120
120
|
}
|
|
121
121
|
}
|
|
@@ -147,7 +147,7 @@ void quantize_LUT_and_bias(
|
|
|
147
147
|
std::vector<float> mins(M);
|
|
148
148
|
float max_span_LUT = -HUGE_VAL, max_span_dis = 0;
|
|
149
149
|
b = 0;
|
|
150
|
-
for (
|
|
150
|
+
for (size_t i = 0; i < M; i++) {
|
|
151
151
|
mins[i] = tab_min(LUT + i * ksub, ksub);
|
|
152
152
|
float span = tab_max(LUT + i * ksub, ksub) - mins[i];
|
|
153
153
|
max_span_LUT = std::max(max_span_LUT, span);
|
|
@@ -156,7 +156,7 @@ void quantize_LUT_and_bias(
|
|
|
156
156
|
}
|
|
157
157
|
a = std::min(255 / max_span_LUT, 65535 / max_span_dis);
|
|
158
158
|
|
|
159
|
-
for (
|
|
159
|
+
for (size_t i = 0; i < M; i++) {
|
|
160
160
|
round_tab(LUT + i * ksub, ksub, a, mins[i], LUTq + i * ksub);
|
|
161
161
|
}
|
|
162
162
|
memset(LUTq + M * ksub, 0, ksub * (M2 - M));
|
|
@@ -167,7 +167,7 @@ void quantize_LUT_and_bias(
|
|
|
167
167
|
float bias_max = tab_max(bias, nprobe);
|
|
168
168
|
max_span_dis = bias_max - bias_min;
|
|
169
169
|
b = 0;
|
|
170
|
-
for (
|
|
170
|
+
for (size_t i = 0; i < M; i++) {
|
|
171
171
|
mins[i] = tab_min(LUT + i * ksub, ksub);
|
|
172
172
|
float span = tab_max(LUT + i * ksub, ksub) - mins[i];
|
|
173
173
|
max_span_LUT = std::max(max_span_LUT, span);
|
|
@@ -177,7 +177,7 @@ void quantize_LUT_and_bias(
|
|
|
177
177
|
a = std::min(255 / max_span_LUT, 65535 / max_span_dis);
|
|
178
178
|
b += bias_min;
|
|
179
179
|
|
|
180
|
-
for (
|
|
180
|
+
for (size_t i = 0; i < M; i++) {
|
|
181
181
|
round_tab(LUT + i * ksub, ksub, a, mins[i], LUTq + i * ksub);
|
|
182
182
|
}
|
|
183
183
|
memset(LUTq + M * ksub, 0, ksub * (M2 - M));
|
|
@@ -192,10 +192,10 @@ void quantize_LUT_and_bias(
|
|
|
192
192
|
|
|
193
193
|
b = HUGE_VAL;
|
|
194
194
|
size_t ij = 0;
|
|
195
|
-
for (
|
|
195
|
+
for (size_t j = 0; j < nprobe; j++) {
|
|
196
196
|
float max_span_dis_j = bias[j] - bias_min;
|
|
197
197
|
float b2j = bias[j];
|
|
198
|
-
for (
|
|
198
|
+
for (size_t i = 0; i < M; i++) {
|
|
199
199
|
mins[ij] = tab_min(LUT + ij * ksub, ksub);
|
|
200
200
|
float span = tab_max(LUT + ij * ksub, ksub) - mins[ij];
|
|
201
201
|
max_span_LUT = std::max(max_span_LUT, span);
|
|
@@ -212,8 +212,8 @@ void quantize_LUT_and_bias(
|
|
|
212
212
|
|
|
213
213
|
ij = 0;
|
|
214
214
|
size_t ij_2 = 0;
|
|
215
|
-
for (
|
|
216
|
-
for (
|
|
215
|
+
for (size_t j = 0; j < nprobe; j++) {
|
|
216
|
+
for (size_t i = 0; i < M; i++) {
|
|
217
217
|
round_tab(
|
|
218
218
|
LUT + ij * ksub, ksub, a, mins[ij], LUTq + ij_2 * ksub);
|
|
219
219
|
ij++;
|
|
@@ -230,10 +230,10 @@ void quantize_LUT_and_bias(
|
|
|
230
230
|
std::vector<float> LUT2_storage(nprobe * M * ksub);
|
|
231
231
|
float* LUT2 = LUT2_storage.data();
|
|
232
232
|
size_t ijc = 0;
|
|
233
|
-
for (
|
|
233
|
+
for (size_t j = 0; j < nprobe; j++) {
|
|
234
234
|
float bias_j = bias[j] / M;
|
|
235
|
-
for (
|
|
236
|
-
for (
|
|
235
|
+
for (size_t i = 0; i < M; i++) {
|
|
236
|
+
for (size_t c = 0; c < ksub; c++) {
|
|
237
237
|
LUT2[ijc] = LUT[ijc] + bias_j;
|
|
238
238
|
ijc++;
|
|
239
239
|
}
|
|
@@ -241,8 +241,8 @@ void quantize_LUT_and_bias(
|
|
|
241
241
|
}
|
|
242
242
|
std::vector<float> mins(M, HUGE_VAL), maxs(M, -HUGE_VAL);
|
|
243
243
|
size_t ij = 0;
|
|
244
|
-
for (
|
|
245
|
-
for (
|
|
244
|
+
for (size_t j = 0; j < nprobe; j++) {
|
|
245
|
+
for (size_t i = 0; i < M; i++) {
|
|
246
246
|
mins[i] = std::min(mins[i], tab_min(LUT2 + ij * ksub, ksub));
|
|
247
247
|
maxs[i] = std::max(maxs[i], tab_max(LUT2 + ij * ksub, ksub));
|
|
248
248
|
ij++;
|
|
@@ -251,7 +251,7 @@ void quantize_LUT_and_bias(
|
|
|
251
251
|
|
|
252
252
|
float max_span = -HUGE_VAL;
|
|
253
253
|
b = 0;
|
|
254
|
-
for (
|
|
254
|
+
for (size_t i = 0; i < M; i++) {
|
|
255
255
|
float span = maxs[i] - mins[i];
|
|
256
256
|
max_span = std::max(max_span, span);
|
|
257
257
|
b += mins[i];
|
|
@@ -259,8 +259,8 @@ void quantize_LUT_and_bias(
|
|
|
259
259
|
a = 255 / max_span;
|
|
260
260
|
ij = 0;
|
|
261
261
|
size_t ij_2 = 0;
|
|
262
|
-
for (
|
|
263
|
-
for (
|
|
262
|
+
for (size_t j = 0; j < nprobe; j++) {
|
|
263
|
+
for (size_t i = 0; i < M; i++) {
|
|
264
264
|
round_tab(
|
|
265
265
|
LUT2 + ij * ksub, ksub, a, mins[i], LUTq + ij_2 * ksub);
|
|
266
266
|
ij++;
|
|
@@ -298,7 +298,7 @@ void aq_quantize_LUT_and_bias(
|
|
|
298
298
|
float bias_max = tab_max(bias, nprobe);
|
|
299
299
|
max_span_dis = bias_max - bias_min;
|
|
300
300
|
b = 0;
|
|
301
|
-
for (
|
|
301
|
+
for (size_t i = 0; i < M; i++) {
|
|
302
302
|
mins[i] = tab_min(LUT + i * ksub, ksub);
|
|
303
303
|
float span = tab_max(LUT + i * ksub, ksub) - mins[i];
|
|
304
304
|
max_span_LUT = std::max(max_span_LUT, span);
|
|
@@ -308,7 +308,7 @@ void aq_quantize_LUT_and_bias(
|
|
|
308
308
|
a = std::min(255 / max_span_LUT, 65535 / max_span_dis);
|
|
309
309
|
b += bias_min;
|
|
310
310
|
|
|
311
|
-
for (
|
|
311
|
+
for (size_t i = 0; i < M; i++) {
|
|
312
312
|
round_tab(LUT + i * ksub, ksub, a, mins[i], LUTq + i * ksub);
|
|
313
313
|
}
|
|
314
314
|
memset(LUTq + M * ksub, 0, ksub * (M2 - M));
|
|
@@ -324,14 +324,14 @@ float aq_estimate_norm_scale(
|
|
|
324
324
|
size_t M_norm,
|
|
325
325
|
const float* LUT) {
|
|
326
326
|
float max_span_LUT = -HUGE_VAL;
|
|
327
|
-
for (
|
|
327
|
+
for (size_t i = 0; i < M - M_norm; i++) {
|
|
328
328
|
float min = tab_min(LUT + i * ksub, ksub);
|
|
329
329
|
float span = tab_max(LUT + i * ksub, ksub) - min;
|
|
330
330
|
max_span_LUT = std::max(max_span_LUT, span);
|
|
331
331
|
}
|
|
332
332
|
|
|
333
333
|
float max_span_LUT_norm = -HUGE_VAL;
|
|
334
|
-
for (
|
|
334
|
+
for (size_t i = M - M_norm; i < M; i++) {
|
|
335
335
|
float min = tab_min(LUT + i * ksub, ksub);
|
|
336
336
|
float span = tab_max(LUT + i * ksub, ksub) - min;
|
|
337
337
|
max_span_LUT_norm = std::max(max_span_LUT_norm, span);
|
|
@@ -50,7 +50,7 @@ void round_uint8_per_column_multi(
|
|
|
50
50
|
|
|
51
51
|
/** LUT quantization to uint8 and bias to uint16.
|
|
52
52
|
*
|
|
53
|
-
* (nprobe, M, ksub, lut_is_3d) determine the size of the
|
|
53
|
+
* (nprobe, M, ksub, lut_is_3d) determine the size of the LUT
|
|
54
54
|
*
|
|
55
55
|
* LUT input:
|
|
56
56
|
* - 2D size (M, ksub): single matrix per probe (lut_is_3d=false)
|