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.
Files changed (379) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/ext/faiss/ext.cpp +1 -1
  4. data/ext/faiss/extconf.rb +4 -4
  5. data/ext/faiss/index.cpp +63 -45
  6. data/ext/faiss/index_binary.cpp +37 -27
  7. data/ext/faiss/kmeans.cpp +9 -8
  8. data/ext/faiss/pca_matrix.cpp +9 -7
  9. data/ext/faiss/product_quantizer.cpp +13 -11
  10. data/ext/faiss/utils.cpp +4 -2
  11. data/ext/faiss/utils.h +4 -0
  12. data/lib/faiss/version.rb +1 -1
  13. data/lib/faiss.rb +1 -1
  14. data/vendor/faiss/faiss/AutoTune.cpp +214 -82
  15. data/vendor/faiss/faiss/AutoTune.h +14 -1
  16. data/vendor/faiss/faiss/Clustering.cpp +97 -249
  17. data/vendor/faiss/faiss/Clustering.h +18 -0
  18. data/vendor/faiss/faiss/IVFlib.cpp +67 -44
  19. data/vendor/faiss/faiss/Index.cpp +25 -12
  20. data/vendor/faiss/faiss/Index.h +26 -4
  21. data/vendor/faiss/faiss/Index2Layer.cpp +37 -53
  22. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +68 -61
  23. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +36 -34
  24. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +4 -1
  25. data/vendor/faiss/faiss/IndexBinary.cpp +6 -3
  26. data/vendor/faiss/faiss/IndexBinary.h +4 -4
  27. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +1 -1
  28. data/vendor/faiss/faiss/IndexBinaryFlat.h +1 -1
  29. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -4
  30. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +92 -95
  31. data/vendor/faiss/faiss/IndexBinaryHNSW.h +9 -3
  32. data/vendor/faiss/faiss/IndexBinaryHash.cpp +45 -236
  33. data/vendor/faiss/faiss/IndexBinaryHash.h +6 -6
  34. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +120 -414
  35. data/vendor/faiss/faiss/IndexFastScan.cpp +105 -129
  36. data/vendor/faiss/faiss/IndexFastScan.h +35 -24
  37. data/vendor/faiss/faiss/IndexFlat.cpp +216 -152
  38. data/vendor/faiss/faiss/IndexFlat.h +32 -14
  39. data/vendor/faiss/faiss/IndexFlatCodes.cpp +88 -41
  40. data/vendor/faiss/faiss/IndexFlatCodes.h +7 -1
  41. data/vendor/faiss/faiss/IndexHNSW.cpp +299 -187
  42. data/vendor/faiss/faiss/IndexHNSW.h +30 -14
  43. data/vendor/faiss/faiss/IndexIDMap.cpp +26 -22
  44. data/vendor/faiss/faiss/IndexIDMap.h +9 -7
  45. data/vendor/faiss/faiss/IndexIVF.cpp +535 -405
  46. data/vendor/faiss/faiss/IndexIVF.h +47 -16
  47. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +77 -74
  48. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +105 -99
  49. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +6 -3
  50. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +379 -249
  51. data/vendor/faiss/faiss/IndexIVFFastScan.h +65 -60
  52. data/vendor/faiss/faiss/IndexIVFFlat.cpp +41 -124
  53. data/vendor/faiss/faiss/IndexIVFFlat.h +32 -0
  54. data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +89 -138
  55. data/vendor/faiss/faiss/IndexIVFFlatPanorama.h +3 -1
  56. data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +18 -15
  57. data/vendor/faiss/faiss/IndexIVFPQ.cpp +77 -907
  58. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +184 -122
  59. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +3 -0
  60. data/vendor/faiss/faiss/IndexIVFPQR.cpp +23 -18
  61. data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +59 -60
  62. data/vendor/faiss/faiss/IndexIVFRaBitQ.h +4 -3
  63. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +564 -416
  64. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +269 -111
  65. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +41 -127
  66. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +1 -1
  67. data/vendor/faiss/faiss/IndexLSH.cpp +44 -25
  68. data/vendor/faiss/faiss/IndexLattice.cpp +41 -36
  69. data/vendor/faiss/faiss/IndexNNDescent.cpp +37 -21
  70. data/vendor/faiss/faiss/IndexNNDescent.h +2 -2
  71. data/vendor/faiss/faiss/IndexNSG.cpp +40 -23
  72. data/vendor/faiss/faiss/IndexNSG.h +0 -2
  73. data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +32 -12
  74. data/vendor/faiss/faiss/IndexPQ.cpp +129 -213
  75. data/vendor/faiss/faiss/IndexPQ.h +3 -2
  76. data/vendor/faiss/faiss/IndexPQFastScan.cpp +20 -14
  77. data/vendor/faiss/faiss/IndexPQFastScan.h +3 -0
  78. data/vendor/faiss/faiss/IndexPreTransform.cpp +25 -18
  79. data/vendor/faiss/faiss/IndexPreTransform.h +1 -1
  80. data/vendor/faiss/faiss/IndexRaBitQ.cpp +31 -43
  81. data/vendor/faiss/faiss/IndexRaBitQ.h +4 -3
  82. data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +135 -317
  83. data/vendor/faiss/faiss/IndexRaBitQFastScan.h +192 -34
  84. data/vendor/faiss/faiss/IndexRefine.cpp +30 -55
  85. data/vendor/faiss/faiss/IndexRefine.h +4 -4
  86. data/vendor/faiss/faiss/IndexReplicas.cpp +6 -6
  87. data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +15 -14
  88. data/vendor/faiss/faiss/IndexRowwiseMinMax.h +1 -1
  89. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +82 -14
  90. data/vendor/faiss/faiss/IndexShards.cpp +13 -13
  91. data/vendor/faiss/faiss/IndexShardsIVF.cpp +21 -15
  92. data/vendor/faiss/faiss/MatrixStats.cpp +5 -4
  93. data/vendor/faiss/faiss/MetaIndexes.cpp +19 -17
  94. data/vendor/faiss/faiss/MetaIndexes.h +1 -1
  95. data/vendor/faiss/faiss/MetricType.h +29 -6
  96. data/vendor/faiss/faiss/SuperKMeans.cpp +656 -0
  97. data/vendor/faiss/faiss/SuperKMeans.h +97 -0
  98. data/vendor/faiss/faiss/VectorTransform.cpp +349 -141
  99. data/vendor/faiss/faiss/VectorTransform.h +39 -16
  100. data/vendor/faiss/faiss/build.cpp +23 -0
  101. data/vendor/faiss/faiss/build.h +15 -0
  102. data/vendor/faiss/faiss/clone_index.cpp +55 -51
  103. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +47 -47
  104. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +11 -0
  105. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +38 -38
  106. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +11 -0
  107. data/vendor/faiss/faiss/{cppcontrib/factory_tools.cpp → factory_tools.cpp} +6 -1
  108. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +1 -1
  109. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +6 -5
  110. data/vendor/faiss/faiss/gpu/GpuResources.h +1 -1
  111. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +9 -9
  112. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +4 -3
  113. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +46 -0
  114. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +56 -0
  115. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +78 -1
  116. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +72 -0
  117. data/vendor/faiss/faiss/gpu/test/TestUtils.h +23 -0
  118. data/vendor/faiss/faiss/gpu/utils/CuvsFilterConvert.h +1 -1
  119. data/vendor/faiss/faiss/gpu/utils/CuvsUtils.h +21 -10
  120. data/vendor/faiss/faiss/gpu_metal/GpuIndexFlat.h +22 -0
  121. data/vendor/faiss/faiss/gpu_metal/MetalCloner.h +35 -0
  122. data/vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h +40 -0
  123. data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +51 -0
  124. data/vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h +65 -0
  125. data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +66 -0
  126. data/vendor/faiss/faiss/gpu_metal/MetalResources.h +79 -0
  127. data/vendor/faiss/faiss/gpu_metal/StandardMetalResources.h +35 -0
  128. data/vendor/faiss/faiss/impl/AdSampling.cpp +103 -0
  129. data/vendor/faiss/faiss/impl/AdSampling.h +35 -0
  130. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +64 -34
  131. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +1 -0
  132. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +10 -9
  133. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +3 -28
  134. data/vendor/faiss/faiss/impl/ClusteringHelpers.cpp +244 -0
  135. data/vendor/faiss/faiss/impl/ClusteringHelpers.h +94 -0
  136. data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +367 -0
  137. data/vendor/faiss/faiss/impl/ClusteringInitialization.h +107 -0
  138. data/vendor/faiss/faiss/impl/CodePacker.cpp +7 -3
  139. data/vendor/faiss/faiss/impl/CodePacker.h +11 -3
  140. data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +83 -0
  141. data/vendor/faiss/faiss/impl/CodePackerRaBitQ.h +47 -0
  142. data/vendor/faiss/faiss/impl/DistanceComputer.h +8 -8
  143. data/vendor/faiss/faiss/impl/FaissAssert.h +64 -3
  144. data/vendor/faiss/faiss/impl/FaissException.h +50 -3
  145. data/vendor/faiss/faiss/impl/HNSW.cpp +117 -351
  146. data/vendor/faiss/faiss/impl/HNSW.h +21 -40
  147. data/vendor/faiss/faiss/impl/IDSelector.cpp +15 -11
  148. data/vendor/faiss/faiss/impl/IDSelector.h +8 -8
  149. data/vendor/faiss/faiss/impl/InvertedListScannerStats.h +26 -0
  150. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +114 -102
  151. data/vendor/faiss/faiss/impl/NNDescent.cpp +63 -26
  152. data/vendor/faiss/faiss/impl/NNDescent.h +6 -2
  153. data/vendor/faiss/faiss/impl/NSG.cpp +44 -26
  154. data/vendor/faiss/faiss/impl/NSG.h +20 -10
  155. data/vendor/faiss/faiss/impl/Panorama.cpp +76 -52
  156. data/vendor/faiss/faiss/impl/Panorama.h +265 -78
  157. data/vendor/faiss/faiss/impl/PdxLayout.cpp +93 -0
  158. data/vendor/faiss/faiss/impl/PdxLayout.h +41 -0
  159. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +62 -37
  160. data/vendor/faiss/faiss/impl/PolysemousTraining.h +3 -3
  161. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +35 -35
  162. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +21 -16
  163. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +99 -80
  164. data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
  165. data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +135 -37
  166. data/vendor/faiss/faiss/impl/RaBitQUtils.h +148 -21
  167. data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +298 -301
  168. data/vendor/faiss/faiss/impl/RaBitQuantizer.h +3 -10
  169. data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.cpp +15 -41
  170. data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.h +0 -4
  171. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +40 -32
  172. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
  173. data/vendor/faiss/faiss/impl/ResultHandler.h +218 -113
  174. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +119 -2362
  175. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +27 -3
  176. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +14 -11
  177. data/vendor/faiss/faiss/impl/VisitedTable.cpp +42 -0
  178. data/vendor/faiss/faiss/impl/VisitedTable.h +76 -0
  179. data/vendor/faiss/faiss/impl/approx_topk/approx_topk.h +276 -0
  180. data/vendor/faiss/faiss/impl/approx_topk/avx2.cpp +68 -0
  181. data/vendor/faiss/faiss/{utils → impl}/approx_topk/generic.h +15 -8
  182. data/vendor/faiss/faiss/impl/approx_topk/neon.cpp +68 -0
  183. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h +169 -0
  184. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h +117 -0
  185. data/vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h +146 -0
  186. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h +73 -0
  187. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h +270 -0
  188. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +460 -0
  189. data/vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h +159 -0
  190. data/vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h +92 -0
  191. data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +26 -0
  192. data/vendor/faiss/faiss/impl/binary_hamming/avx512.cpp +26 -0
  193. data/vendor/faiss/faiss/impl/binary_hamming/dispatch.h +143 -0
  194. data/vendor/faiss/faiss/impl/binary_hamming/neon.cpp +26 -0
  195. data/vendor/faiss/faiss/impl/binary_hamming/rvv.cpp +26 -0
  196. data/vendor/faiss/faiss/impl/expanded_scanners.h +163 -0
  197. data/vendor/faiss/faiss/impl/{FastScanDistancePostProcessing.h → fast_scan/FastScanDistancePostProcessing.h} +13 -6
  198. data/vendor/faiss/faiss/impl/{LookupTableScaler.h → fast_scan/LookupTableScaler.h} +16 -5
  199. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h +237 -0
  200. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h +185 -0
  201. data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +229 -0
  202. data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +268 -0
  203. data/vendor/faiss/faiss/impl/{pq4_fast_scan.cpp → fast_scan/fast_scan.cpp} +176 -4
  204. data/vendor/faiss/faiss/impl/fast_scan/fast_scan.h +341 -0
  205. data/vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp +36 -0
  206. data/vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp +40 -0
  207. data/vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp +120 -0
  208. data/vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp +104 -0
  209. data/vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h +213 -0
  210. data/vendor/faiss/faiss/impl/{pq4_fast_scan_search_qbs.cpp → fast_scan/kernels_simd512.h} +26 -348
  211. data/vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h +90 -0
  212. data/vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h +108 -0
  213. data/vendor/faiss/faiss/impl/{simd_result_handlers.h → fast_scan/simd_result_handlers.h} +290 -142
  214. data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +54 -0
  215. data/vendor/faiss/faiss/impl/hnsw/LockVector.h +64 -0
  216. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp +91 -0
  217. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h +64 -0
  218. data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +104 -0
  219. data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +111 -0
  220. data/vendor/faiss/faiss/impl/index_read.cpp +1950 -505
  221. data/vendor/faiss/faiss/impl/index_read_utils.h +1 -2
  222. data/vendor/faiss/faiss/impl/index_write.cpp +112 -21
  223. data/vendor/faiss/faiss/impl/io.cpp +6 -6
  224. data/vendor/faiss/faiss/impl/io_macros.h +33 -16
  225. data/vendor/faiss/faiss/impl/kmeans1d.cpp +10 -10
  226. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +81 -40
  227. data/vendor/faiss/faiss/impl/lattice_Zn.h +6 -6
  228. data/vendor/faiss/faiss/impl/mapped_io.cpp +15 -8
  229. data/vendor/faiss/faiss/impl/platform_macros.h +11 -4
  230. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +549 -0
  231. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +245 -0
  232. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h +105 -0
  233. data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +106 -0
  234. data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +21 -0
  235. data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +21 -0
  236. data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +21 -0
  237. data/vendor/faiss/faiss/impl/{code_distance/code_distance-avx2.h → pq_code_distance/pq_code_distance-avx2.h} +43 -220
  238. data/vendor/faiss/faiss/impl/{code_distance/code_distance-avx512.h → pq_code_distance/pq_code_distance-avx512.h} +25 -112
  239. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +59 -0
  240. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h +96 -0
  241. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +256 -0
  242. data/vendor/faiss/faiss/impl/{code_distance/code_distance-sve.h → pq_code_distance/pq_code_distance-sve.cpp} +57 -146
  243. data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +68 -0
  244. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +320 -483
  245. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
  246. data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +121 -0
  247. data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +137 -0
  248. data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +371 -0
  249. data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +190 -0
  250. data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +94 -0
  251. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +603 -0
  252. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +597 -0
  253. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +388 -0
  254. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +630 -0
  255. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +311 -0
  256. data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +387 -0
  257. data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +54 -0
  258. data/vendor/faiss/faiss/impl/simd_dispatch.h +173 -0
  259. data/vendor/faiss/faiss/impl/simdlib/simdlib.h +57 -0
  260. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_avx2.h +274 -171
  261. data/vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h +414 -0
  262. data/vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h +44 -0
  263. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_emulated.h +231 -166
  264. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_neon.h +275 -217
  265. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_ppc64.h +201 -160
  266. data/vendor/faiss/faiss/impl/svs_io.cpp +12 -3
  267. data/vendor/faiss/faiss/impl/svs_io.h +8 -2
  268. data/vendor/faiss/faiss/index_factory.cpp +115 -28
  269. data/vendor/faiss/faiss/index_io.h +53 -3
  270. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +73 -20
  271. data/vendor/faiss/faiss/invlists/DirectMap.cpp +24 -14
  272. data/vendor/faiss/faiss/invlists/DirectMap.h +4 -3
  273. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +157 -73
  274. data/vendor/faiss/faiss/invlists/InvertedLists.h +86 -23
  275. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +4 -4
  276. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +14 -14
  277. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +1 -1
  278. data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +9 -19
  279. data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +2 -2
  280. data/vendor/faiss/faiss/svs/IndexSVSFlat.h +2 -0
  281. data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +350 -0
  282. data/vendor/faiss/faiss/svs/IndexSVSIVF.h +128 -0
  283. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp +40 -0
  284. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h +43 -0
  285. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +225 -0
  286. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h +71 -0
  287. data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +25 -1
  288. data/vendor/faiss/faiss/svs/IndexSVSVamana.h +19 -2
  289. data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +1 -1
  290. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +19 -2
  291. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +14 -0
  292. data/vendor/faiss/faiss/utils/Heap.cpp +56 -10
  293. data/vendor/faiss/faiss/utils/Heap.h +21 -0
  294. data/vendor/faiss/faiss/utils/NeuralNet.cpp +54 -40
  295. data/vendor/faiss/faiss/utils/NeuralNet.h +1 -1
  296. data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +10 -4
  297. data/vendor/faiss/faiss/utils/distances.cpp +507 -559
  298. data/vendor/faiss/faiss/utils/distances.h +118 -1
  299. data/vendor/faiss/faiss/utils/distances_dispatch.h +250 -0
  300. data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +8 -7
  301. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +33 -14
  302. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +12 -1
  303. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +16 -293
  304. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp +57 -0
  305. data/vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h +290 -0
  306. data/vendor/faiss/faiss/utils/distances_simd.cpp +72 -3681
  307. data/vendor/faiss/faiss/utils/extra_distances.cpp +60 -102
  308. data/vendor/faiss/faiss/utils/extra_distances.h +79 -7
  309. data/vendor/faiss/faiss/utils/hamming-inl.h +13 -11
  310. data/vendor/faiss/faiss/utils/hamming.cpp +66 -517
  311. data/vendor/faiss/faiss/utils/hamming.h +92 -2
  312. data/vendor/faiss/faiss/utils/hamming_distance/common.h +287 -10
  313. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +15 -0
  314. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp +15 -0
  315. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h +142 -0
  316. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +234 -0
  317. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h +368 -0
  318. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h +322 -0
  319. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h +39 -0
  320. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer.h +146 -0
  321. data/vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h +481 -0
  322. data/vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp +15 -0
  323. data/vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp +15 -0
  324. data/vendor/faiss/faiss/utils/partitioning.cpp +66 -987
  325. data/vendor/faiss/faiss/utils/partitioning.h +31 -0
  326. data/vendor/faiss/faiss/utils/popcount.h +29 -0
  327. data/vendor/faiss/faiss/utils/pq_code_distance.h +251 -0
  328. data/vendor/faiss/faiss/utils/prefetch.h +2 -2
  329. data/vendor/faiss/faiss/utils/quantize_lut.cpp +30 -30
  330. data/vendor/faiss/faiss/utils/quantize_lut.h +1 -1
  331. data/vendor/faiss/faiss/utils/rabitq_simd.h +124 -343
  332. data/vendor/faiss/faiss/utils/random.cpp +6 -6
  333. data/vendor/faiss/faiss/utils/simd_impl/IVFFlatScanner-inl.h +51 -0
  334. data/vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp +154 -0
  335. data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +777 -0
  336. data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +306 -0
  337. data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +1431 -0
  338. data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +1095 -0
  339. data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +189 -0
  340. data/vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h +195 -0
  341. data/vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h +392 -0
  342. data/vendor/faiss/faiss/utils/{distances_fused/simdlib_based.h → simd_impl/exhaustive_L2sqr_blas_cmax.h} +5 -10
  343. data/vendor/faiss/faiss/utils/simd_impl/hamming_impl.h +481 -0
  344. data/vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp +14 -0
  345. data/vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp +14 -0
  346. data/vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h +1085 -0
  347. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +355 -0
  348. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +477 -0
  349. data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +55 -0
  350. data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +55 -0
  351. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h +32 -0
  352. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h +43 -0
  353. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp +57 -0
  354. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp +45 -0
  355. data/vendor/faiss/faiss/utils/simd_levels.cpp +334 -0
  356. data/vendor/faiss/faiss/utils/simd_levels.h +183 -0
  357. data/vendor/faiss/faiss/utils/sorting.cpp +48 -36
  358. data/vendor/faiss/faiss/utils/utils.cpp +21 -14
  359. data/vendor/faiss/faiss/utils/utils.h +3 -3
  360. metadata +156 -42
  361. data/vendor/faiss/faiss/impl/RaBitQStats.cpp +0 -29
  362. data/vendor/faiss/faiss/impl/RaBitQStats.h +0 -56
  363. data/vendor/faiss/faiss/impl/code_distance/code_distance-generic.h +0 -81
  364. data/vendor/faiss/faiss/impl/code_distance/code_distance.h +0 -186
  365. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +0 -216
  366. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +0 -224
  367. data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +0 -84
  368. data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +0 -196
  369. data/vendor/faiss/faiss/utils/approx_topk/mode.h +0 -34
  370. data/vendor/faiss/faiss/utils/distances_fused/avx512.h +0 -36
  371. data/vendor/faiss/faiss/utils/extra_distances-inl.h +0 -228
  372. data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +0 -462
  373. data/vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h +0 -490
  374. data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +0 -450
  375. data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +0 -87
  376. data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +0 -524
  377. data/vendor/faiss/faiss/utils/simdlib.h +0 -42
  378. data/vendor/faiss/faiss/utils/simdlib_avx512.h +0 -296
  379. /data/vendor/faiss/faiss/{cppcontrib/factory_tools.h → factory_tools.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
@@ -0,0 +1,251 @@
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 <cstddef>
11
+ #include <cstdint>
12
+ #include <type_traits>
13
+
14
+ #include <faiss/impl/ProductQuantizer.h>
15
+ #include <faiss/impl/platform_macros.h>
16
+ #include <faiss/utils/simd_levels.h>
17
+
18
+ namespace faiss {
19
+ namespace pq_code_distance {
20
+
21
+ /*********************************************************************
22
+ * PQCodeDistance — SIMD-dispatched PQ code distance
23
+ *
24
+ * Computes the distance from a PQ-encoded vector to a query vector,
25
+ * given a precomputed table of sub-distances (one per subquantizer
26
+ * per centroid). Originally extracted from IndexIVFPQ.cpp.
27
+ *
28
+ * DESIGN:
29
+ *
30
+ * PQCodeDistance<PQDecoderT, SL> computes PQ code distances at a given
31
+ * SIMD level. The dispatch site (IndexIVFPQ.cpp, IndexPQ.cpp) uses
32
+ * with_simd_level to select SL at runtime, which instantiates
33
+ * PQCodeDistance for ALL decoder types (PQDecoder8, PQDecoder16,
34
+ * PQDecoderGeneric) at the chosen level.
35
+ *
36
+ * Only PQDecoder8 has SIMD-optimized implementations (AVX2, AVX512,
37
+ * ARM_SVE). The other decoders always use scalar code — their decode()
38
+ * method is inherently sequential, so SIMD doesn't help.
39
+ *
40
+ * The primary template is always complete (no forward declarations
41
+ * needed). For PQDecoder8, it delegates to _impl dispatch bridge
42
+ * functions whose specializations are defined in per-SIMD .cpp files
43
+ * and resolved at link time. For other decoders, it uses scalar.
44
+ *
45
+ * ADDING A NEW SIMD LEVEL:
46
+ *
47
+ * 1. Add the level to SIMDLevel enum (simd_levels.h)
48
+ * 2. Add dispatch_config entry (simd_dispatch.bzl)
49
+ * 3. Define pq_code_distance_single_impl<NEW_LEVEL> and
50
+ * pq_code_distance_four_impl<NEW_LEVEL> specializations in a
51
+ * new .cpp file compiled with appropriate SIMD flags
52
+ * 4. Add the .cpp to the build (CMakeLists.txt, xplat.bzl)
53
+ *********************************************************************/
54
+
55
+ /// Scalar PQ code distance implementation.
56
+ /// Templated only on decoder type, independent of SIMD level.
57
+ /// Used directly by non-PQDecoder8 decoders (PQDecoder16,
58
+ /// PQDecoderGeneric) and as fallback for PQDecoder8 at NONE/NEON.
59
+ template <typename PQDecoderT>
60
+ struct PQCodeDistanceScalar {
61
+ using PQDecoder = PQDecoderT;
62
+
63
+ static float distance_single_code(
64
+ // number of subquantizers
65
+ size_t M,
66
+ size_t nbits,
67
+ // precomputed distances, layout (M, ksub)
68
+ const float* sim_table,
69
+ const uint8_t* code) {
70
+ PQDecoderT decoder(code, nbits);
71
+ const size_t ksub = 1 << nbits;
72
+
73
+ const float* tab = sim_table;
74
+ float result = 0;
75
+
76
+ for (size_t m = 0; m < M; m++) {
77
+ result += tab[decoder.decode()];
78
+ tab += ksub;
79
+ }
80
+
81
+ return result;
82
+ }
83
+
84
+ static void distance_four_codes(
85
+ size_t M,
86
+ size_t nbits,
87
+ const float* sim_table,
88
+ const uint8_t* __restrict code0,
89
+ const uint8_t* __restrict code1,
90
+ const uint8_t* __restrict code2,
91
+ const uint8_t* __restrict code3,
92
+ float& result0,
93
+ float& result1,
94
+ float& result2,
95
+ float& result3) {
96
+ PQDecoderT decoder0(code0, nbits);
97
+ PQDecoderT decoder1(code1, nbits);
98
+ PQDecoderT decoder2(code2, nbits);
99
+ PQDecoderT decoder3(code3, nbits);
100
+ const size_t ksub = 1 << nbits;
101
+
102
+ const float* tab = sim_table;
103
+ result0 = 0;
104
+ result1 = 0;
105
+ result2 = 0;
106
+ result3 = 0;
107
+
108
+ for (size_t m = 0; m < M; m++) {
109
+ result0 += tab[decoder0.decode()];
110
+ result1 += tab[decoder1.decode()];
111
+ result2 += tab[decoder2.decode()];
112
+ result3 += tab[decoder3.decode()];
113
+ tab += ksub;
114
+ }
115
+ }
116
+ };
117
+
118
+ /*********************************************************************
119
+ * Dispatch bridge — function templates for PQDecoder8 SIMD dispatch.
120
+ *
121
+ * Primary declarations only; specializations are defined in per-SIMD
122
+ * .cpp files (AVX2, AVX512, ARM_SVE) and pq_code_distance-generic.cpp
123
+ * (NONE, ARM_NEON). Same pattern as fvec_L2sqr et al. in distances.h.
124
+ *********************************************************************/
125
+
126
+ template <SIMDLevel SL>
127
+ float pq_code_distance_single_impl(
128
+ size_t M,
129
+ size_t nbits,
130
+ const float* sim_table,
131
+ const uint8_t* code);
132
+
133
+ template <SIMDLevel SL>
134
+ void pq_code_distance_four_impl(
135
+ size_t M,
136
+ size_t nbits,
137
+ const float* sim_table,
138
+ const uint8_t* __restrict code0,
139
+ const uint8_t* __restrict code1,
140
+ const uint8_t* __restrict code2,
141
+ const uint8_t* __restrict code3,
142
+ float& result0,
143
+ float& result1,
144
+ float& result2,
145
+ float& result3);
146
+
147
+ /// Primary template — always complete.
148
+ /// For PQDecoder8, delegates to _impl dispatch bridges (resolved at
149
+ /// link time to per-SIMD implementations). For other decoders, uses
150
+ /// scalar — their sequential decode() methods don't benefit from SIMD.
151
+ template <typename PQDecoderT, SIMDLevel SL>
152
+ struct PQCodeDistance {
153
+ using PQDecoder = PQDecoderT;
154
+
155
+ static float distance_single_code(
156
+ size_t M,
157
+ size_t nbits,
158
+ const float* sim_table,
159
+ const uint8_t* code) {
160
+ if constexpr (std::is_same_v<PQDecoderT, PQDecoder8>) {
161
+ return pq_code_distance_single_impl<SL>(M, nbits, sim_table, code);
162
+ } else {
163
+ return PQCodeDistanceScalar<PQDecoderT>::distance_single_code(
164
+ M, nbits, sim_table, code);
165
+ }
166
+ }
167
+
168
+ static void distance_four_codes(
169
+ size_t M,
170
+ size_t nbits,
171
+ const float* sim_table,
172
+ const uint8_t* __restrict code0,
173
+ const uint8_t* __restrict code1,
174
+ const uint8_t* __restrict code2,
175
+ const uint8_t* __restrict code3,
176
+ float& result0,
177
+ float& result1,
178
+ float& result2,
179
+ float& result3) {
180
+ if constexpr (std::is_same_v<PQDecoderT, PQDecoder8>) {
181
+ pq_code_distance_four_impl<SL>(
182
+ M,
183
+ nbits,
184
+ sim_table,
185
+ code0,
186
+ code1,
187
+ code2,
188
+ code3,
189
+ result0,
190
+ result1,
191
+ result2,
192
+ result3);
193
+ } else {
194
+ PQCodeDistanceScalar<PQDecoderT>::distance_four_codes(
195
+ M,
196
+ nbits,
197
+ sim_table,
198
+ code0,
199
+ code1,
200
+ code2,
201
+ code3,
202
+ result0,
203
+ result1,
204
+ result2,
205
+ result3);
206
+ }
207
+ }
208
+ };
209
+
210
+ /*********************************************************************
211
+ * Non-templated PQ code distance dispatch (PQDecoder8 only).
212
+ *
213
+ * These follow the same pattern as distances.h: the caller does not
214
+ * name a SIMDLevel. Internally they dispatch via with_simd_level
215
+ * to the best available SIMD implementation (DD: runtime detection,
216
+ * static: compile-time selection). Definitions are in
217
+ * pq_code_distance-generic.cpp.
218
+ *********************************************************************/
219
+
220
+ /// Compute PQ distance for a single code, dispatching to the best
221
+ /// available SIMD level.
222
+ FAISS_API float pq_code_distance_single(
223
+ size_t M,
224
+ size_t nbits,
225
+ const float* sim_table,
226
+ const uint8_t* code);
227
+
228
+ /// Compute PQ distances for four codes simultaneously, dispatching
229
+ /// to the best available SIMD level.
230
+ FAISS_API void pq_code_distance_four(
231
+ size_t M,
232
+ size_t nbits,
233
+ const float* sim_table,
234
+ const uint8_t* __restrict code0,
235
+ const uint8_t* __restrict code1,
236
+ const uint8_t* __restrict code2,
237
+ const uint8_t* __restrict code3,
238
+ float& result0,
239
+ float& result1,
240
+ float& result2,
241
+ float& result3);
242
+
243
+ } // namespace pq_code_distance
244
+
245
+ // Re-export public API into namespace faiss for convenience
246
+ using pq_code_distance::pq_code_distance_four;
247
+ using pq_code_distance::pq_code_distance_single;
248
+ using pq_code_distance::PQCodeDistance;
249
+ using pq_code_distance::PQCodeDistanceScalar;
250
+
251
+ } // namespace faiss
@@ -9,9 +9,9 @@
9
9
 
10
10
  // prefetches
11
11
 
12
- #ifdef __AVX__
12
+ #if defined(__x86_64__) || defined(_M_X64)
13
13
 
14
- // AVX
14
+ // x86_64
15
15
 
16
16
  #include <xmmintrin.h>
17
17
 
@@ -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 (int i = 0; i < n; i++) {
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 (int i = 0; i < n; i++) {
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 (int i = 0; i < n; i++) {
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 (int i = 0; i < n; i++) {
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 (int i = 0; i < n; i++) {
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 (int i = 0; i < n; i++) {
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 (int i = 0; i < n; i++) {
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 (int j = 0; j < m; j++) {
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 (int i = 0; i < n; i++) {
116
+ for (size_t i = 0; i < n; i++) {
117
117
  b += mins[i];
118
- for (int j = 0; j < m; j++) {
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 (int i = 0; i < M; i++) {
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 (int i = 0; i < M; i++) {
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 (int i = 0; i < M; i++) {
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 (int i = 0; i < M; i++) {
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 (int j = 0; j < nprobe; j++) {
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 (int i = 0; i < M; i++) {
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 (int j = 0; j < nprobe; j++) {
216
- for (int i = 0; i < M; i++) {
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 (int j = 0; j < nprobe; j++) {
233
+ for (size_t j = 0; j < nprobe; j++) {
234
234
  float bias_j = bias[j] / M;
235
- for (int i = 0; i < M; i++) {
236
- for (int c = 0; c < ksub; c++) {
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 (int j = 0; j < nprobe; j++) {
245
- for (int i = 0; i < M; i++) {
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 (int i = 0; i < M; i++) {
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 (int j = 0; j < nprobe; j++) {
263
- for (int i = 0; i < M; i++) {
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 (int i = 0; i < M; i++) {
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 (int i = 0; i < M; i++) {
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 (int i = 0; i < M - M_norm; i++) {
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 (int i = M - M_norm; i < M; i++) {
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 the LUT
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)