faiss 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (292) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/LICENSE.txt +1 -1
  4. data/lib/faiss/version.rb +1 -1
  5. data/vendor/faiss/faiss/AutoTune.cpp +2 -2
  6. data/vendor/faiss/faiss/AutoTune.h +2 -2
  7. data/vendor/faiss/faiss/Clustering.cpp +2 -2
  8. data/vendor/faiss/faiss/Clustering.h +2 -2
  9. data/vendor/faiss/faiss/IVFlib.cpp +2 -2
  10. data/vendor/faiss/faiss/IVFlib.h +2 -2
  11. data/vendor/faiss/faiss/Index.cpp +6 -2
  12. data/vendor/faiss/faiss/Index.h +10 -3
  13. data/vendor/faiss/faiss/Index2Layer.cpp +2 -2
  14. data/vendor/faiss/faiss/Index2Layer.h +2 -2
  15. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +7 -7
  16. data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +2 -2
  17. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +14 -16
  18. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +2 -2
  19. data/vendor/faiss/faiss/IndexBinary.cpp +13 -2
  20. data/vendor/faiss/faiss/IndexBinary.h +8 -2
  21. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +2 -3
  22. data/vendor/faiss/faiss/IndexBinaryFlat.h +2 -2
  23. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +2 -2
  24. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +2 -2
  25. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +2 -7
  26. data/vendor/faiss/faiss/IndexBinaryHNSW.h +2 -2
  27. data/vendor/faiss/faiss/IndexBinaryHash.cpp +2 -3
  28. data/vendor/faiss/faiss/IndexBinaryHash.h +2 -2
  29. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +2 -2
  30. data/vendor/faiss/faiss/IndexBinaryIVF.h +2 -2
  31. data/vendor/faiss/faiss/IndexFastScan.cpp +10 -14
  32. data/vendor/faiss/faiss/IndexFastScan.h +11 -2
  33. data/vendor/faiss/faiss/IndexFlat.cpp +2 -3
  34. data/vendor/faiss/faiss/IndexFlat.h +2 -2
  35. data/vendor/faiss/faiss/IndexFlatCodes.cpp +11 -2
  36. data/vendor/faiss/faiss/IndexFlatCodes.h +5 -2
  37. data/vendor/faiss/faiss/IndexHNSW.cpp +13 -6
  38. data/vendor/faiss/faiss/IndexHNSW.h +2 -2
  39. data/vendor/faiss/faiss/IndexIDMap.cpp +19 -3
  40. data/vendor/faiss/faiss/IndexIDMap.h +5 -2
  41. data/vendor/faiss/faiss/IndexIVF.cpp +2 -3
  42. data/vendor/faiss/faiss/IndexIVF.h +5 -4
  43. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +6 -7
  44. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +2 -2
  45. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +3 -14
  46. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +2 -4
  47. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +71 -34
  48. data/vendor/faiss/faiss/IndexIVFFastScan.h +19 -2
  49. data/vendor/faiss/faiss/IndexIVFFlat.cpp +2 -2
  50. data/vendor/faiss/faiss/IndexIVFFlat.h +2 -2
  51. data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +2 -2
  52. data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.h +2 -2
  53. data/vendor/faiss/faiss/IndexIVFPQ.cpp +2 -3
  54. data/vendor/faiss/faiss/IndexIVFPQ.h +2 -2
  55. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +7 -33
  56. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +2 -4
  57. data/vendor/faiss/faiss/IndexIVFPQR.cpp +2 -2
  58. data/vendor/faiss/faiss/IndexIVFPQR.h +2 -2
  59. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +2 -3
  60. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +2 -2
  61. data/vendor/faiss/faiss/IndexLSH.cpp +2 -3
  62. data/vendor/faiss/faiss/IndexLSH.h +2 -2
  63. data/vendor/faiss/faiss/IndexLattice.cpp +2 -2
  64. data/vendor/faiss/faiss/IndexLattice.h +2 -2
  65. data/vendor/faiss/faiss/IndexNNDescent.cpp +2 -2
  66. data/vendor/faiss/faiss/IndexNNDescent.h +2 -2
  67. data/vendor/faiss/faiss/IndexNSG.cpp +2 -5
  68. data/vendor/faiss/faiss/IndexNSG.h +2 -2
  69. data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +2 -2
  70. data/vendor/faiss/faiss/IndexNeuralNetCodec.h +2 -2
  71. data/vendor/faiss/faiss/IndexPQ.cpp +26 -26
  72. data/vendor/faiss/faiss/IndexPQ.h +2 -2
  73. data/vendor/faiss/faiss/IndexPQFastScan.cpp +2 -5
  74. data/vendor/faiss/faiss/IndexPQFastScan.h +2 -11
  75. data/vendor/faiss/faiss/IndexPreTransform.cpp +2 -2
  76. data/vendor/faiss/faiss/IndexPreTransform.h +2 -2
  77. data/vendor/faiss/faiss/IndexRefine.cpp +41 -4
  78. data/vendor/faiss/faiss/IndexRefine.h +9 -2
  79. data/vendor/faiss/faiss/IndexReplicas.cpp +2 -2
  80. data/vendor/faiss/faiss/IndexReplicas.h +2 -2
  81. data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +2 -2
  82. data/vendor/faiss/faiss/IndexRowwiseMinMax.h +2 -2
  83. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +2 -3
  84. data/vendor/faiss/faiss/IndexScalarQuantizer.h +2 -2
  85. data/vendor/faiss/faiss/IndexShards.cpp +2 -2
  86. data/vendor/faiss/faiss/IndexShards.h +2 -2
  87. data/vendor/faiss/faiss/IndexShardsIVF.cpp +2 -2
  88. data/vendor/faiss/faiss/IndexShardsIVF.h +2 -2
  89. data/vendor/faiss/faiss/MatrixStats.cpp +2 -2
  90. data/vendor/faiss/faiss/MatrixStats.h +2 -2
  91. data/vendor/faiss/faiss/MetaIndexes.cpp +2 -3
  92. data/vendor/faiss/faiss/MetaIndexes.h +2 -2
  93. data/vendor/faiss/faiss/MetricType.h +2 -2
  94. data/vendor/faiss/faiss/VectorTransform.cpp +2 -2
  95. data/vendor/faiss/faiss/VectorTransform.h +2 -2
  96. data/vendor/faiss/faiss/clone_index.cpp +2 -2
  97. data/vendor/faiss/faiss/clone_index.h +2 -2
  98. data/vendor/faiss/faiss/cppcontrib/SaDecodeKernels.h +2 -2
  99. data/vendor/faiss/faiss/cppcontrib/detail/CoarseBitType.h +2 -2
  100. data/vendor/faiss/faiss/cppcontrib/detail/UintReader.h +2 -2
  101. data/vendor/faiss/faiss/cppcontrib/factory_tools.cpp +44 -4
  102. data/vendor/faiss/faiss/cppcontrib/factory_tools.h +7 -2
  103. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +2 -2
  104. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +2 -2
  105. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-neon-inl.h +2 -2
  106. data/vendor/faiss/faiss/cppcontrib/sa_decode/MinMax-inl.h +2 -2
  107. data/vendor/faiss/faiss/cppcontrib/sa_decode/MinMaxFP16-inl.h +2 -2
  108. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +2 -2
  109. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +2 -2
  110. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-neon-inl.h +2 -2
  111. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +2 -5
  112. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +2 -2
  113. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +13 -13
  114. data/vendor/faiss/faiss/gpu/GpuCloner.h +2 -2
  115. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +6 -6
  116. data/vendor/faiss/faiss/gpu/GpuDistance.h +11 -7
  117. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +2 -2
  118. data/vendor/faiss/faiss/gpu/GpuIcmEncoder.h +2 -2
  119. data/vendor/faiss/faiss/gpu/GpuIndex.h +8 -7
  120. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +2 -2
  121. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +6 -3
  122. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +2 -2
  123. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +2 -2
  124. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +2 -2
  125. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +3 -3
  126. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +2 -2
  127. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +2 -2
  128. data/vendor/faiss/faiss/gpu/GpuResources.cpp +7 -2
  129. data/vendor/faiss/faiss/gpu/GpuResources.h +11 -4
  130. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +51 -21
  131. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +15 -5
  132. data/vendor/faiss/faiss/gpu/impl/IndexUtils.h +2 -2
  133. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +2 -2
  134. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +2 -2
  135. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +2 -2
  136. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +2 -2
  137. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +2 -2
  138. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +2 -2
  139. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +2 -2
  140. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +2 -3
  141. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +2 -2
  142. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +2 -2
  143. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +2 -2
  144. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +54 -54
  145. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +80 -78
  146. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +51 -51
  147. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +2 -2
  148. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +3 -3
  149. data/vendor/faiss/faiss/gpu/test/TestGpuResidualQuantizer.cpp +70 -0
  150. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +74 -4
  151. data/vendor/faiss/faiss/gpu/test/TestUtils.h +2 -2
  152. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +2 -2
  153. data/vendor/faiss/faiss/gpu/utils/{RaftUtils.h → CuvsUtils.h} +12 -11
  154. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +2 -2
  155. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +2 -2
  156. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +2 -2
  157. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +2 -2
  158. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +2 -2
  159. data/vendor/faiss/faiss/gpu/utils/Timer.h +2 -2
  160. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +79 -11
  161. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +17 -5
  162. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +2 -2
  163. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +2 -2
  164. data/vendor/faiss/faiss/impl/CodePacker.cpp +2 -2
  165. data/vendor/faiss/faiss/impl/CodePacker.h +2 -2
  166. data/vendor/faiss/faiss/impl/DistanceComputer.h +2 -2
  167. data/vendor/faiss/faiss/impl/FaissAssert.h +2 -2
  168. data/vendor/faiss/faiss/impl/FaissException.cpp +2 -2
  169. data/vendor/faiss/faiss/impl/FaissException.h +2 -3
  170. data/vendor/faiss/faiss/impl/HNSW.cpp +24 -19
  171. data/vendor/faiss/faiss/impl/HNSW.h +12 -2
  172. data/vendor/faiss/faiss/impl/IDSelector.cpp +2 -2
  173. data/vendor/faiss/faiss/impl/IDSelector.h +2 -2
  174. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +2 -2
  175. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +2 -2
  176. data/vendor/faiss/faiss/impl/LookupTableScaler.h +2 -2
  177. data/vendor/faiss/faiss/impl/NNDescent.cpp +2 -2
  178. data/vendor/faiss/faiss/impl/NNDescent.h +2 -2
  179. data/vendor/faiss/faiss/impl/NSG.cpp +27 -21
  180. data/vendor/faiss/faiss/impl/NSG.h +20 -8
  181. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +2 -2
  182. data/vendor/faiss/faiss/impl/PolysemousTraining.h +2 -2
  183. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +2 -4
  184. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.h +2 -2
  185. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +2 -2
  186. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +2 -2
  187. data/vendor/faiss/faiss/impl/ProductQuantizer.h +2 -2
  188. data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
  189. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +2 -36
  190. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +3 -13
  191. data/vendor/faiss/faiss/impl/ResultHandler.h +2 -2
  192. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +2 -2
  193. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +2 -2
  194. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +2 -2
  195. data/vendor/faiss/faiss/impl/ThreadedIndex.h +2 -2
  196. data/vendor/faiss/faiss/impl/code_distance/code_distance-avx2.h +2 -2
  197. data/vendor/faiss/faiss/impl/code_distance/code_distance-avx512.h +2 -2
  198. data/vendor/faiss/faiss/impl/code_distance/code_distance-generic.h +2 -2
  199. data/vendor/faiss/faiss/impl/code_distance/code_distance-sve.h +440 -0
  200. data/vendor/faiss/faiss/impl/code_distance/code_distance.h +55 -2
  201. data/vendor/faiss/faiss/impl/index_read.cpp +2 -5
  202. data/vendor/faiss/faiss/impl/index_read_utils.h +2 -2
  203. data/vendor/faiss/faiss/impl/index_write.cpp +2 -6
  204. data/vendor/faiss/faiss/impl/io.cpp +2 -2
  205. data/vendor/faiss/faiss/impl/io.h +2 -2
  206. data/vendor/faiss/faiss/impl/io_macros.h +2 -9
  207. data/vendor/faiss/faiss/impl/kmeans1d.cpp +2 -3
  208. data/vendor/faiss/faiss/impl/kmeans1d.h +2 -2
  209. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +2 -3
  210. data/vendor/faiss/faiss/impl/lattice_Zn.h +2 -2
  211. data/vendor/faiss/faiss/impl/platform_macros.h +12 -2
  212. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +2 -2
  213. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +20 -2
  214. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +2 -2
  215. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +2 -2
  216. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +3 -3
  217. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +2 -2
  218. data/vendor/faiss/faiss/impl/simd_result_handlers.h +18 -18
  219. data/vendor/faiss/faiss/index_factory.cpp +20 -21
  220. data/vendor/faiss/faiss/index_factory.h +2 -2
  221. data/vendor/faiss/faiss/index_io.h +2 -2
  222. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +2 -2
  223. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +2 -2
  224. data/vendor/faiss/faiss/invlists/DirectMap.cpp +2 -2
  225. data/vendor/faiss/faiss/invlists/DirectMap.h +2 -2
  226. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +2 -2
  227. data/vendor/faiss/faiss/invlists/InvertedLists.h +2 -2
  228. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +2 -2
  229. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +2 -2
  230. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +2 -3
  231. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +2 -2
  232. data/vendor/faiss/faiss/python/python_callbacks.cpp +2 -2
  233. data/vendor/faiss/faiss/python/python_callbacks.h +2 -2
  234. data/vendor/faiss/faiss/utils/AlignedTable.h +5 -3
  235. data/vendor/faiss/faiss/utils/Heap.cpp +2 -2
  236. data/vendor/faiss/faiss/utils/Heap.h +2 -2
  237. data/vendor/faiss/faiss/utils/NeuralNet.cpp +11 -7
  238. data/vendor/faiss/faiss/utils/NeuralNet.h +2 -2
  239. data/vendor/faiss/faiss/utils/WorkerThread.cpp +2 -2
  240. data/vendor/faiss/faiss/utils/WorkerThread.h +2 -2
  241. data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +2 -2
  242. data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +2 -2
  243. data/vendor/faiss/faiss/utils/approx_topk/generic.h +2 -2
  244. data/vendor/faiss/faiss/utils/approx_topk/mode.h +2 -2
  245. data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +2 -2
  246. data/vendor/faiss/faiss/utils/bf16.h +2 -2
  247. data/vendor/faiss/faiss/utils/distances.cpp +191 -2
  248. data/vendor/faiss/faiss/utils/distances.h +3 -3
  249. data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +2 -2
  250. data/vendor/faiss/faiss/utils/distances_fused/avx512.h +2 -2
  251. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +2 -2
  252. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +2 -2
  253. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +2 -2
  254. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.h +2 -2
  255. data/vendor/faiss/faiss/utils/distances_simd.cpp +502 -3
  256. data/vendor/faiss/faiss/utils/extra_distances-inl.h +2 -2
  257. data/vendor/faiss/faiss/utils/extra_distances.cpp +2 -3
  258. data/vendor/faiss/faiss/utils/extra_distances.h +2 -2
  259. data/vendor/faiss/faiss/utils/fp16-arm.h +2 -2
  260. data/vendor/faiss/faiss/utils/fp16-fp16c.h +2 -2
  261. data/vendor/faiss/faiss/utils/fp16-inl.h +2 -2
  262. data/vendor/faiss/faiss/utils/fp16.h +2 -2
  263. data/vendor/faiss/faiss/utils/hamming-inl.h +2 -2
  264. data/vendor/faiss/faiss/utils/hamming.cpp +2 -3
  265. data/vendor/faiss/faiss/utils/hamming.h +2 -2
  266. data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +2 -2
  267. data/vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h +490 -0
  268. data/vendor/faiss/faiss/utils/hamming_distance/common.h +2 -2
  269. data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +2 -2
  270. data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +5 -2
  271. data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +5 -5
  272. data/vendor/faiss/faiss/utils/ordered_key_value.h +2 -2
  273. data/vendor/faiss/faiss/utils/partitioning.cpp +2 -2
  274. data/vendor/faiss/faiss/utils/partitioning.h +2 -2
  275. data/vendor/faiss/faiss/utils/prefetch.h +2 -2
  276. data/vendor/faiss/faiss/utils/quantize_lut.cpp +2 -2
  277. data/vendor/faiss/faiss/utils/quantize_lut.h +2 -2
  278. data/vendor/faiss/faiss/utils/random.cpp +2 -2
  279. data/vendor/faiss/faiss/utils/random.h +2 -2
  280. data/vendor/faiss/faiss/utils/simdlib.h +2 -2
  281. data/vendor/faiss/faiss/utils/simdlib_avx2.h +2 -2
  282. data/vendor/faiss/faiss/utils/simdlib_avx512.h +2 -2
  283. data/vendor/faiss/faiss/utils/simdlib_emulated.h +2 -2
  284. data/vendor/faiss/faiss/utils/simdlib_neon.h +2 -2
  285. data/vendor/faiss/faiss/utils/simdlib_ppc64.h +2 -2
  286. data/vendor/faiss/faiss/utils/sorting.cpp +2 -2
  287. data/vendor/faiss/faiss/utils/sorting.h +2 -2
  288. data/vendor/faiss/faiss/utils/transpose/transpose-avx2-inl.h +2 -2
  289. data/vendor/faiss/faiss/utils/transpose/transpose-avx512-inl.h +2 -2
  290. data/vendor/faiss/faiss/utils/utils.cpp +7 -7
  291. data/vendor/faiss/faiss/utils/utils.h +4 -3
  292. metadata +9 -10
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -212,12 +212,16 @@ nn::Int32Tensor2D QINCoStep::encode(
212
212
  // repeated codebook
213
213
  Tensor2D zqs_r(n * K, d); // size n, K, d
214
214
  Tensor2D cc(n * K, d * 2); // size n, K, d * 2
215
- size_t d = this->d;
216
215
 
217
- auto copy_row = [d](Tensor2D& t, size_t i, size_t j, const float* data) {
218
- assert(i <= t.shape[0] && j <= t.shape[1]);
219
- memcpy(t.data() + i * t.shape[1] + j, data, sizeof(float) * d);
220
- };
216
+ size_t local_d = this->d;
217
+
218
+ auto copy_row =
219
+ [local_d](Tensor2D& t, size_t i, size_t j, const float* data) {
220
+ assert(i <= t.shape[0] && j <= t.shape[1]);
221
+ memcpy(t.data() + i * t.shape[1] + j,
222
+ data,
223
+ sizeof(float) * local_d);
224
+ };
221
225
 
222
226
  // manual broadcasting
223
227
  for (size_t i = 0; i < n; i++) {
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -18,6 +18,8 @@
18
18
 
19
19
  #ifdef __AVX2__
20
20
  #include <immintrin.h>
21
+ #elif defined(__ARM_FEATURE_SVE)
22
+ #include <arm_sve.h>
21
23
  #endif
22
24
 
23
25
  #include <faiss/impl/AuxIndexStructures.h>
@@ -557,6 +559,183 @@ void exhaustive_L2sqr_blas_cmax_avx2(
557
559
  InterruptCallback::check();
558
560
  }
559
561
  }
562
+ #elif defined(__ARM_FEATURE_SVE)
563
+ void exhaustive_L2sqr_blas_cmax_sve(
564
+ const float* x,
565
+ const float* y,
566
+ size_t d,
567
+ size_t nx,
568
+ size_t ny,
569
+ Top1BlockResultHandler<CMax<float, int64_t>>& res,
570
+ const float* y_norms) {
571
+ // BLAS does not like empty matrices
572
+ if (nx == 0 || ny == 0)
573
+ return;
574
+
575
+ /* block sizes */
576
+ const size_t bs_x = distance_compute_blas_query_bs;
577
+ const size_t bs_y = distance_compute_blas_database_bs;
578
+ // const size_t bs_x = 16, bs_y = 16;
579
+ std::unique_ptr<float[]> ip_block(new float[bs_x * bs_y]);
580
+ std::unique_ptr<float[]> x_norms(new float[nx]);
581
+ std::unique_ptr<float[]> del2;
582
+
583
+ fvec_norms_L2sqr(x_norms.get(), x, d, nx);
584
+
585
+ const size_t lanes = svcntw();
586
+
587
+ if (!y_norms) {
588
+ float* y_norms2 = new float[ny];
589
+ del2.reset(y_norms2);
590
+ fvec_norms_L2sqr(y_norms2, y, d, ny);
591
+ y_norms = y_norms2;
592
+ }
593
+
594
+ for (size_t i0 = 0; i0 < nx; i0 += bs_x) {
595
+ size_t i1 = i0 + bs_x;
596
+ if (i1 > nx)
597
+ i1 = nx;
598
+
599
+ res.begin_multiple(i0, i1);
600
+
601
+ for (size_t j0 = 0; j0 < ny; j0 += bs_y) {
602
+ size_t j1 = j0 + bs_y;
603
+ if (j1 > ny)
604
+ j1 = ny;
605
+ /* compute the actual dot products */
606
+ {
607
+ float one = 1, zero = 0;
608
+ FINTEGER nyi = j1 - j0, nxi = i1 - i0, di = d;
609
+ sgemm_("Transpose",
610
+ "Not transpose",
611
+ &nyi,
612
+ &nxi,
613
+ &di,
614
+ &one,
615
+ y + j0 * d,
616
+ &di,
617
+ x + i0 * d,
618
+ &di,
619
+ &zero,
620
+ ip_block.get(),
621
+ &nyi);
622
+ }
623
+ #pragma omp parallel for
624
+ for (int64_t i = i0; i < i1; i++) {
625
+ const size_t count = j1 - j0;
626
+ float* ip_line = ip_block.get() + (i - i0) * count;
627
+
628
+ svprfw(svwhilelt_b32_u64(0, count), ip_line, SV_PLDL1KEEP);
629
+ svprfw(svwhilelt_b32_u64(lanes, count),
630
+ ip_line + lanes,
631
+ SV_PLDL1KEEP);
632
+
633
+ // Track lanes min distances + lanes min indices.
634
+ // All the distances tracked do not take x_norms[i]
635
+ // into account in order to get rid of extra
636
+ // vaddq_f32(x_norms[i], ...) instructions
637
+ // is distance computations.
638
+ auto min_distances = svdup_n_f32(res.dis_tab[i] - x_norms[i]);
639
+
640
+ // these indices are local and are relative to j0.
641
+ // so, value 0 means j0.
642
+ auto min_indices = svdup_n_u32(0u);
643
+
644
+ auto current_indices = svindex_u32(0u, 1u);
645
+
646
+ // process lanes * 2 elements per loop
647
+ for (size_t idx_j = 0; idx_j < count;
648
+ idx_j += lanes * 2, ip_line += lanes * 2) {
649
+ svprfw(svwhilelt_b32_u64(idx_j + lanes * 2, count),
650
+ ip_line + lanes * 2,
651
+ SV_PLDL1KEEP);
652
+ svprfw(svwhilelt_b32_u64(idx_j + lanes * 3, count),
653
+ ip_line + lanes * 3,
654
+ SV_PLDL1KEEP);
655
+
656
+ // mask
657
+ const auto mask_0 = svwhilelt_b32_u64(idx_j, count);
658
+ const auto mask_1 = svwhilelt_b32_u64(idx_j + lanes, count);
659
+
660
+ // load values for norms
661
+ const auto y_norm_0 =
662
+ svld1_f32(mask_0, y_norms + idx_j + j0 + 0);
663
+ const auto y_norm_1 =
664
+ svld1_f32(mask_1, y_norms + idx_j + j0 + lanes);
665
+
666
+ // load values for dot products
667
+ const auto ip_0 = svld1_f32(mask_0, ip_line + 0);
668
+ const auto ip_1 = svld1_f32(mask_1, ip_line + lanes);
669
+
670
+ // compute dis = y_norm[j] - 2 * dot(x_norm[i], y_norm[j]).
671
+ // x_norm[i] was dropped off because it is a constant for a
672
+ // given i. We'll deal with it later.
673
+ const auto distances_0 =
674
+ svmla_n_f32_z(mask_0, y_norm_0, ip_0, -2.f);
675
+ const auto distances_1 =
676
+ svmla_n_f32_z(mask_1, y_norm_1, ip_1, -2.f);
677
+
678
+ // compare the new distances to the min distances
679
+ // for each of the first group of 4 ARM SIMD components.
680
+ auto comparison =
681
+ svcmpgt_f32(mask_0, min_distances, distances_0);
682
+
683
+ // update min distances and indices with closest vectors if
684
+ // needed.
685
+ min_distances =
686
+ svsel_f32(comparison, distances_0, min_distances);
687
+ min_indices =
688
+ svsel_u32(comparison, current_indices, min_indices);
689
+ current_indices = svadd_n_u32_x(
690
+ mask_0,
691
+ current_indices,
692
+ static_cast<uint32_t>(lanes));
693
+
694
+ // compare the new distances to the min distances
695
+ // for each of the second group of 4 ARM SIMD components.
696
+ comparison =
697
+ svcmpgt_f32(mask_1, min_distances, distances_1);
698
+
699
+ // update min distances and indices with closest vectors if
700
+ // needed.
701
+ min_distances =
702
+ svsel_f32(comparison, distances_1, min_distances);
703
+ min_indices =
704
+ svsel_u32(comparison, current_indices, min_indices);
705
+ current_indices = svadd_n_u32_x(
706
+ mask_1,
707
+ current_indices,
708
+ static_cast<uint32_t>(lanes));
709
+ }
710
+
711
+ // add missing x_norms[i]
712
+ // negative values can occur for identical vectors
713
+ // due to roundoff errors.
714
+ auto mask = svwhilelt_b32_u64(0, count);
715
+ min_distances = svadd_n_f32_z(
716
+ svcmpge_n_f32(mask, min_distances, -x_norms[i]),
717
+ min_distances,
718
+ x_norms[i]);
719
+ min_indices = svadd_n_u32_x(
720
+ mask, min_indices, static_cast<uint32_t>(j0));
721
+ mask = svcmple_n_f32(mask, min_distances, res.dis_tab[i]);
722
+ if (svcntp_b32(svptrue_b32(), mask) == 0)
723
+ res.add_result(i, res.dis_tab[i], res.ids_tab[i]);
724
+ else {
725
+ const auto min_distance = svminv_f32(mask, min_distances);
726
+ const auto min_index = svminv_u32(
727
+ svcmpeq_n_f32(mask, min_distances, min_distance),
728
+ min_indices);
729
+ res.add_result(i, min_distance, min_index);
730
+ }
731
+ }
732
+ }
733
+ // Does nothing for SingleBestResultHandler, but
734
+ // keeping the call for the consistency.
735
+ res.end_multiple();
736
+ InterruptCallback::check();
737
+ }
738
+ }
560
739
  #endif
561
740
 
562
741
  // an override if only a single closest point is needed
@@ -579,6 +758,16 @@ void exhaustive_L2sqr_blas<Top1BlockResultHandler<CMax<float, int64_t>>>(
579
758
  // run the specialized AVX2 implementation
580
759
  exhaustive_L2sqr_blas_cmax_avx2(x, y, d, nx, ny, res, y_norms);
581
760
 
761
+ #elif defined(__ARM_FEATURE_SVE)
762
+ // use a faster fused kernel if available
763
+ if (exhaustive_L2sqr_fused_cmax(x, y, d, nx, ny, res, y_norms)) {
764
+ // the kernel is available and it is complete, we're done.
765
+ return;
766
+ }
767
+
768
+ // run the specialized SVE implementation
769
+ exhaustive_L2sqr_blas_cmax_sve(x, y, d, nx, ny, res, y_norms);
770
+
582
771
  #elif defined(__aarch64__)
583
772
  // use a faster fused kernel if available
584
773
  if (exhaustive_L2sqr_fused_cmax(x, y, d, nx, ny, res, y_norms)) {
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -469,7 +469,7 @@ void compute_PQ_dis_tables_dsub2(
469
469
  * @param n size of the tables
470
470
  * @param a size n
471
471
  * @param b size n
472
- * @param c restult table, size n
472
+ * @param c result table, size n
473
473
  */
474
474
  void fvec_madd(size_t n, const float* a, float bf, const float* b, float* c);
475
475
 
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.