faiss 0.3.1 → 0.3.3

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 (293) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -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 +3 -3
  7. data/vendor/faiss/faiss/Clustering.cpp +37 -6
  8. data/vendor/faiss/faiss/Clustering.h +12 -3
  9. data/vendor/faiss/faiss/IVFlib.cpp +6 -3
  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 +30 -8
  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 +3 -3
  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 +3 -3
  30. data/vendor/faiss/faiss/IndexBinaryIVF.h +2 -2
  31. data/vendor/faiss/faiss/IndexFastScan.cpp +32 -18
  32. data/vendor/faiss/faiss/IndexFastScan.h +11 -2
  33. data/vendor/faiss/faiss/IndexFlat.cpp +13 -10
  34. data/vendor/faiss/faiss/IndexFlat.h +2 -2
  35. data/vendor/faiss/faiss/IndexFlatCodes.cpp +170 -7
  36. data/vendor/faiss/faiss/IndexFlatCodes.h +25 -5
  37. data/vendor/faiss/faiss/IndexHNSW.cpp +156 -96
  38. data/vendor/faiss/faiss/IndexHNSW.h +54 -5
  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 +5 -6
  42. data/vendor/faiss/faiss/IndexIVF.h +13 -4
  43. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +21 -7
  44. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +5 -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 +201 -91
  48. data/vendor/faiss/faiss/IndexIVFFastScan.h +33 -9
  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 +3 -6
  54. data/vendor/faiss/faiss/IndexIVFPQ.h +2 -2
  55. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +7 -14
  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 +3 -21
  64. data/vendor/faiss/faiss/IndexLattice.h +5 -24
  65. data/vendor/faiss/faiss/IndexNNDescent.cpp +2 -31
  66. data/vendor/faiss/faiss/IndexNNDescent.h +3 -3
  67. data/vendor/faiss/faiss/IndexNSG.cpp +2 -5
  68. data/vendor/faiss/faiss/IndexNSG.h +3 -3
  69. data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +56 -0
  70. data/vendor/faiss/faiss/IndexNeuralNetCodec.h +49 -0
  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 +3 -3
  77. data/vendor/faiss/faiss/IndexRefine.cpp +46 -9
  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 +5 -4
  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 +9 -4
  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 +97 -19
  101. data/vendor/faiss/faiss/cppcontrib/factory_tools.cpp +192 -0
  102. data/vendor/faiss/faiss/cppcontrib/factory_tools.h +29 -0
  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 +85 -32
  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 +45 -13
  114. data/vendor/faiss/faiss/gpu/GpuCloner.h +2 -2
  115. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +12 -6
  116. data/vendor/faiss/faiss/gpu/GpuDistance.h +11 -7
  117. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +3 -3
  118. data/vendor/faiss/faiss/gpu/GpuIcmEncoder.h +2 -2
  119. data/vendor/faiss/faiss/gpu/GpuIndex.h +10 -15
  120. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +2 -2
  121. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +285 -0
  122. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +2 -2
  123. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +8 -2
  124. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +4 -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 +66 -11
  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 +28 -23
  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 +8 -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 +10 -7
  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 +144 -77
  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 +3 -3
  153. data/vendor/faiss/faiss/gpu/utils/{RaftUtils.h → CuvsUtils.h} +12 -11
  154. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +8 -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 +6 -3
  159. data/vendor/faiss/faiss/gpu/utils/Timer.h +3 -3
  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 +27 -2
  163. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +11 -3
  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 +48 -2
  167. data/vendor/faiss/faiss/impl/FaissAssert.h +6 -4
  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 +378 -205
  171. data/vendor/faiss/faiss/impl/HNSW.h +55 -24
  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 +10 -10
  175. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +2 -2
  176. data/vendor/faiss/faiss/impl/LookupTableScaler.h +36 -2
  177. data/vendor/faiss/faiss/impl/NNDescent.cpp +15 -10
  178. data/vendor/faiss/faiss/impl/NNDescent.h +2 -2
  179. data/vendor/faiss/faiss/impl/NSG.cpp +26 -49
  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 +3 -2
  187. data/vendor/faiss/faiss/impl/ProductQuantizer.h +7 -3
  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 +153 -34
  192. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +721 -104
  193. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +5 -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 +7 -2
  197. data/vendor/faiss/faiss/impl/code_distance/code_distance-avx512.h +248 -0
  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 +31 -20
  202. data/vendor/faiss/faiss/impl/index_read_utils.h +37 -0
  203. data/vendor/faiss/faiss/impl/index_write.cpp +30 -16
  204. data/vendor/faiss/faiss/impl/io.cpp +15 -7
  205. data/vendor/faiss/faiss/impl/io.h +6 -6
  206. data/vendor/faiss/faiss/impl/io_macros.h +8 -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 +34 -2
  212. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +13 -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 +3 -3
  215. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +450 -3
  216. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +8 -8
  217. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +3 -3
  218. data/vendor/faiss/faiss/impl/simd_result_handlers.h +151 -67
  219. data/vendor/faiss/faiss/index_factory.cpp +51 -34
  220. data/vendor/faiss/faiss/index_factory.h +2 -2
  221. data/vendor/faiss/faiss/index_io.h +14 -7
  222. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +30 -10
  223. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +5 -2
  224. data/vendor/faiss/faiss/invlists/DirectMap.cpp +11 -3
  225. data/vendor/faiss/faiss/invlists/DirectMap.h +2 -2
  226. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +57 -19
  227. data/vendor/faiss/faiss/invlists/InvertedLists.h +20 -11
  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 +23 -9
  231. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +4 -3
  232. data/vendor/faiss/faiss/python/python_callbacks.cpp +5 -5
  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 +107 -2
  237. data/vendor/faiss/faiss/utils/NeuralNet.cpp +346 -0
  238. data/vendor/faiss/faiss/utils/NeuralNet.h +147 -0
  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 +36 -0
  247. data/vendor/faiss/faiss/utils/distances.cpp +249 -90
  248. data/vendor/faiss/faiss/utils/distances.h +8 -8
  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 +1543 -56
  256. data/vendor/faiss/faiss/utils/extra_distances-inl.h +72 -2
  257. data/vendor/faiss/faiss/utils/extra_distances.cpp +87 -140
  258. data/vendor/faiss/faiss/utils/extra_distances.h +5 -4
  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 +3 -4
  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 +6 -3
  270. data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +7 -3
  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 +45 -2
  279. data/vendor/faiss/faiss/utils/random.h +27 -2
  280. data/vendor/faiss/faiss/utils/simdlib.h +12 -3
  281. data/vendor/faiss/faiss/utils/simdlib_avx2.h +2 -2
  282. data/vendor/faiss/faiss/utils/simdlib_avx512.h +296 -0
  283. data/vendor/faiss/faiss/utils/simdlib_emulated.h +2 -2
  284. data/vendor/faiss/faiss/utils/simdlib_neon.h +7 -4
  285. data/vendor/faiss/faiss/utils/simdlib_ppc64.h +1084 -0
  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 +176 -0
  290. data/vendor/faiss/faiss/utils/utils.cpp +17 -10
  291. data/vendor/faiss/faiss/utils/utils.h +7 -3
  292. metadata +22 -11
  293. data/vendor/faiss/faiss/impl/code_distance/code_distance_avx512.h +0 -102
@@ -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.
@@ -0,0 +1,176 @@
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
+ // This file contains transposing kernels for AVX512 for // tiny float/int32
11
+ // matrices, such as 16x2.
12
+
13
+ #ifdef __AVX512F__
14
+
15
+ #include <immintrin.h>
16
+
17
+ namespace faiss {
18
+
19
+ // 16x2 -> 2x16
20
+ inline void transpose_16x2(
21
+ const __m512 i0,
22
+ const __m512 i1,
23
+ __m512& o0,
24
+ __m512& o1) {
25
+ // assume we have the following input:
26
+ // i0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
27
+ // i1: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
28
+
29
+ // 0 1 2 3 8 9 10 11 16 17 18 19 24 25 26 27
30
+ const __m512 r0 = _mm512_shuffle_f32x4(i0, i1, _MM_SHUFFLE(2, 0, 2, 0));
31
+ // 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31
32
+ const __m512 r1 = _mm512_shuffle_f32x4(i0, i1, _MM_SHUFFLE(3, 1, 3, 1));
33
+
34
+ // 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
35
+ o0 = _mm512_shuffle_ps(r0, r1, _MM_SHUFFLE(2, 0, 2, 0));
36
+ // 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
37
+ o1 = _mm512_shuffle_ps(r0, r1, _MM_SHUFFLE(3, 1, 3, 1));
38
+ }
39
+
40
+ // 16x4 -> 4x16
41
+ inline void transpose_16x4(
42
+ const __m512 i0,
43
+ const __m512 i1,
44
+ const __m512 i2,
45
+ const __m512 i3,
46
+ __m512& o0,
47
+ __m512& o1,
48
+ __m512& o2,
49
+ __m512& o3) {
50
+ // assume that we have the following input:
51
+ // i0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
52
+ // i1: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
53
+ // i2: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
54
+ // i3: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
55
+
56
+ // 0 1 2 3 8 9 10 11 16 17 18 19 24 25 26 27
57
+ const __m512 r0 = _mm512_shuffle_f32x4(i0, i1, _MM_SHUFFLE(2, 0, 2, 0));
58
+ // 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31
59
+ const __m512 r1 = _mm512_shuffle_f32x4(i0, i1, _MM_SHUFFLE(3, 1, 3, 1));
60
+ // 32 33 34 35 40 41 42 43 48 49 50 51 56 57 58 59
61
+ const __m512 r2 = _mm512_shuffle_f32x4(i2, i3, _MM_SHUFFLE(2, 0, 2, 0));
62
+ // 52 53 54 55 60 61 62 63 52 53 54 55 60 61 62 63
63
+ const __m512 r3 = _mm512_shuffle_f32x4(i2, i3, _MM_SHUFFLE(3, 1, 3, 1));
64
+
65
+ // 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
66
+ const __m512 t0 = _mm512_shuffle_ps(r0, r1, _MM_SHUFFLE(2, 0, 2, 0));
67
+ // 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
68
+ const __m512 t1 = _mm512_shuffle_ps(r0, r1, _MM_SHUFFLE(3, 1, 3, 1));
69
+ // 32 34 52 54 40 42 60 62 48 50 52 54 56 58 60 62
70
+ const __m512 t2 = _mm512_shuffle_ps(r2, r3, _MM_SHUFFLE(2, 0, 2, 0));
71
+ // 33 35 53 55 41 43 61 63 49 51 53 55 57 59 61 63
72
+ const __m512 t3 = _mm512_shuffle_ps(r2, r3, _MM_SHUFFLE(3, 1, 3, 1));
73
+
74
+ const __m512i idx0 = _mm512_set_epi32(
75
+ 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0);
76
+ const __m512i idx1 = _mm512_set_epi32(
77
+ 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1);
78
+
79
+ // 0 4 8 12 16 20 24 28 32 52 40 60 48 52 56 60
80
+ o0 = _mm512_permutex2var_ps(t0, idx0, t2);
81
+ // 1 5 9 13 17 21 25 29 33 53 41 61 49 53 57 61
82
+ o1 = _mm512_permutex2var_ps(t1, idx0, t3);
83
+ // 2 6 10 14 18 22 26 30 34 54 42 62 50 54 58 62
84
+ o2 = _mm512_permutex2var_ps(t0, idx1, t2);
85
+ // 3 7 11 15 19 23 27 31 35 55 43 63 51 55 59 63
86
+ o3 = _mm512_permutex2var_ps(t1, idx1, t3);
87
+ }
88
+
89
+ // 16x8 -> 8x16 transpose
90
+ inline void transpose_16x8(
91
+ const __m512 i0,
92
+ const __m512 i1,
93
+ const __m512 i2,
94
+ const __m512 i3,
95
+ const __m512 i4,
96
+ const __m512 i5,
97
+ const __m512 i6,
98
+ const __m512 i7,
99
+ __m512& o0,
100
+ __m512& o1,
101
+ __m512& o2,
102
+ __m512& o3,
103
+ __m512& o4,
104
+ __m512& o5,
105
+ __m512& o6,
106
+ __m512& o7) {
107
+ // assume that we have the following input:
108
+ // i0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
109
+ // i1: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
110
+ // i2: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
111
+ // i3: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
112
+ // i4: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
113
+ // i5: 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
114
+ // i6: 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
115
+ // i7: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
116
+
117
+ // 0 16 1 17 4 20 5 21 8 24 9 25 12 28 13 29
118
+ const __m512 r0 = _mm512_unpacklo_ps(i0, i1);
119
+ // 2 18 3 19 6 22 7 23 10 26 11 27 14 30 15 31
120
+ const __m512 r1 = _mm512_unpackhi_ps(i0, i1);
121
+ // 32 48 33 49 36 52 37 53 40 56 41 57 44 60 45 61
122
+ const __m512 r2 = _mm512_unpacklo_ps(i2, i3);
123
+ // 34 50 35 51 38 54 39 55 42 58 43 59 46 62 47 63
124
+ const __m512 r3 = _mm512_unpackhi_ps(i2, i3);
125
+ // 64 80 65 81 68 84 69 85 72 88 73 89 76 92 77 93
126
+ const __m512 r4 = _mm512_unpacklo_ps(i4, i5);
127
+ // 66 82 67 83 70 86 71 87 74 90 75 91 78 94 79 95
128
+ const __m512 r5 = _mm512_unpackhi_ps(i4, i5);
129
+ // 96 112 97 113 100 116 101 117 104 120 105 121 108 124 109 125
130
+ const __m512 r6 = _mm512_unpacklo_ps(i6, i7);
131
+ // 98 114 99 115 102 118 103 119 106 122 107 123 110 126 111 127
132
+ const __m512 r7 = _mm512_unpackhi_ps(i6, i7);
133
+
134
+ // 0 16 32 48 4 20 36 52 8 24 40 56 12 28 44 60
135
+ const __m512 t0 = _mm512_shuffle_ps(r0, r2, _MM_SHUFFLE(1, 0, 1, 0));
136
+ // 1 17 33 49 5 21 37 53 9 25 41 57 13 29 45 61
137
+ const __m512 t1 = _mm512_shuffle_ps(r0, r2, _MM_SHUFFLE(3, 2, 3, 2));
138
+ // 2 18 34 50 6 22 38 54 10 26 42 58 14 30 46 62
139
+ const __m512 t2 = _mm512_shuffle_ps(r1, r3, _MM_SHUFFLE(1, 0, 1, 0));
140
+ // 3 19 35 51 7 23 39 55 11 27 43 59 15 31 47 63
141
+ const __m512 t3 = _mm512_shuffle_ps(r1, r3, _MM_SHUFFLE(3, 2, 3, 2));
142
+ // 64 80 96 112 68 84 100 116 72 88 104 120 76 92 108 124
143
+ const __m512 t4 = _mm512_shuffle_ps(r4, r6, _MM_SHUFFLE(1, 0, 1, 0));
144
+ // 65 81 97 113 69 85 101 117 73 89 105 121 77 93 109 125
145
+ const __m512 t5 = _mm512_shuffle_ps(r4, r6, _MM_SHUFFLE(3, 2, 3, 2));
146
+ // 66 82 98 114 70 86 102 118 74 90 106 122 78 94 110 126
147
+ const __m512 t6 = _mm512_shuffle_ps(r5, r7, _MM_SHUFFLE(1, 0, 1, 0));
148
+ // 67 83 99 115 71 87 103 119 75 91 107 123 79 95 111 127
149
+ const __m512 t7 = _mm512_shuffle_ps(r5, r7, _MM_SHUFFLE(3, 2, 3, 2));
150
+
151
+ const __m512i idx0 = _mm512_set_epi32(
152
+ 27, 19, 26, 18, 25, 17, 24, 16, 11, 3, 10, 2, 9, 1, 8, 0);
153
+ const __m512i idx1 = _mm512_set_epi32(
154
+ 31, 23, 30, 22, 29, 21, 28, 20, 15, 7, 14, 6, 13, 5, 12, 4);
155
+
156
+ // 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120
157
+ o0 = _mm512_permutex2var_ps(t0, idx0, t4);
158
+ // 1 9 17 25 33 41 49 57 65 73 81 89 97 105 113 121
159
+ o1 = _mm512_permutex2var_ps(t1, idx0, t5);
160
+ // 2 10 18 26 34 42 50 58 66 74 82 90 98 106 114 122
161
+ o2 = _mm512_permutex2var_ps(t2, idx0, t6);
162
+ // 3 11 19 27 35 43 51 59 67 75 83 91 99 107 115 123
163
+ o3 = _mm512_permutex2var_ps(t3, idx0, t7);
164
+ // 4 12 20 28 36 44 52 60 68 76 84 92 100 108 116 124
165
+ o4 = _mm512_permutex2var_ps(t0, idx1, t4);
166
+ // 5 13 21 29 37 45 53 61 69 77 85 93 101 109 117 125
167
+ o5 = _mm512_permutex2var_ps(t1, idx1, t5);
168
+ // 6 14 22 30 38 46 54 62 70 78 86 94 102 110 118 126
169
+ o6 = _mm512_permutex2var_ps(t2, idx1, t6);
170
+ // 7 15 23 31 39 47 55 63 71 79 87 95 103 111 119 127
171
+ o7 = _mm512_permutex2var_ps(t3, idx1, t7);
172
+ }
173
+
174
+ } // namespace faiss
175
+
176
+ #endif
@@ -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.
@@ -7,6 +7,7 @@
7
7
 
8
8
  // -*- c++ -*-
9
9
 
10
+ #include <faiss/Index.h>
10
11
  #include <faiss/utils/utils.h>
11
12
 
12
13
  #include <cassert>
@@ -114,10 +115,12 @@ std::string get_compile_options() {
114
115
  options += "OPTIMIZE ";
115
116
  #endif
116
117
 
117
- #ifdef __AVX2__
118
- options += "AVX2 ";
119
- #elif __AVX512F__
118
+ #ifdef __AVX512F__
120
119
  options += "AVX512 ";
120
+ #elif defined(__AVX2__)
121
+ options += "AVX2 ";
122
+ #elif defined(__ARM_FEATURE_SVE)
123
+ options += "SVE NEON ";
121
124
  #elif defined(__aarch64__)
122
125
  options += "NEON ";
123
126
  #else
@@ -129,6 +132,10 @@ std::string get_compile_options() {
129
132
  return options;
130
133
  }
131
134
 
135
+ std::string get_version() {
136
+ return VERSION_STRING;
137
+ }
138
+
132
139
  #ifdef _MSC_VER
133
140
  double getmillisecs() {
134
141
  LARGE_INTEGER ts;
@@ -582,9 +589,9 @@ int64_t count_gt(int64_t n, const T* row, T threshold) {
582
589
  } // namespace
583
590
 
584
591
  template <typename T>
585
- void CombinerRangeKNN<T>::compute_sizes(int64_t* L_res_2) {
586
- this->L_res = L_res_2;
587
- L_res_2[0] = 0;
592
+ void CombinerRangeKNN<T>::compute_sizes(int64_t* L_res_init) {
593
+ this->L_res = L_res_init;
594
+ L_res_init[0] = 0;
588
595
  int64_t j = 0;
589
596
  for (int64_t i = 0; i < nq; i++) {
590
597
  int64_t n_in;
@@ -595,11 +602,11 @@ void CombinerRangeKNN<T>::compute_sizes(int64_t* L_res_2) {
595
602
  n_in = lim_remain[j + 1] - lim_remain[j];
596
603
  j++;
597
604
  }
598
- L_res_2[i + 1] = n_in; // L_res_2[i] + n_in;
605
+ L_res_init[i + 1] = n_in; // L_res_init[i] + n_in;
599
606
  }
600
607
  // cumsum
601
608
  for (int64_t i = 0; i < nq; i++) {
602
- L_res_2[i + 1] += L_res_2[i];
609
+ L_res_init[i + 1] += L_res_init[i];
603
610
  }
604
611
  }
605
612
 
@@ -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.
@@ -37,6 +37,9 @@ std::string get_compile_options();
37
37
  * Get some stats about the system
38
38
  **************************************************/
39
39
 
40
+ // Expose FAISS version as a string
41
+ std::string get_version();
42
+
40
43
  /// ms elapsed since some arbitrary epoch
41
44
  double getmillisecs();
42
45
 
@@ -87,7 +90,8 @@ size_t merge_result_table_with(
87
90
  bool keep_min = true,
88
91
  int64_t translation = 0);
89
92
 
90
- /// a balanced assignment has a IF of 1
93
+ /// a balanced assignment has a IF of 1, a completely unbalanced assignment has
94
+ /// an IF = k.
91
95
  double imbalance_factor(int n, int k, const int64_t* assign);
92
96
 
93
97
  /// same, takes a histogram as input
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faiss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-03-14 00:00:00.000000000 Z
10
+ date: 2025-01-31 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rice
@@ -16,14 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: 4.0.2
18
+ version: 4.3.3
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: 4.0.2
25
+ version: 4.3.3
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: numo-narray
29
28
  requirement: !ruby/object:Gem::Requirement
@@ -38,7 +37,6 @@ dependencies:
38
37
  - - ">="
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0'
41
- description:
42
40
  email: andrew@ankane.org
43
41
  executables: []
44
42
  extensions:
@@ -125,6 +123,8 @@ files:
125
123
  - vendor/faiss/faiss/IndexNNDescent.h
126
124
  - vendor/faiss/faiss/IndexNSG.cpp
127
125
  - vendor/faiss/faiss/IndexNSG.h
126
+ - vendor/faiss/faiss/IndexNeuralNetCodec.cpp
127
+ - vendor/faiss/faiss/IndexNeuralNetCodec.h
128
128
  - vendor/faiss/faiss/IndexPQ.cpp
129
129
  - vendor/faiss/faiss/IndexPQ.h
130
130
  - vendor/faiss/faiss/IndexPQFastScan.cpp
@@ -155,6 +155,8 @@ files:
155
155
  - vendor/faiss/faiss/cppcontrib/SaDecodeKernels.h
156
156
  - vendor/faiss/faiss/cppcontrib/detail/CoarseBitType.h
157
157
  - vendor/faiss/faiss/cppcontrib/detail/UintReader.h
158
+ - vendor/faiss/faiss/cppcontrib/factory_tools.cpp
159
+ - vendor/faiss/faiss/cppcontrib/factory_tools.h
158
160
  - vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h
159
161
  - vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h
160
162
  - vendor/faiss/faiss/cppcontrib/sa_decode/Level2-neon-inl.h
@@ -173,6 +175,7 @@ files:
173
175
  - vendor/faiss/faiss/gpu/GpuIcmEncoder.h
174
176
  - vendor/faiss/faiss/gpu/GpuIndex.h
175
177
  - vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h
178
+ - vendor/faiss/faiss/gpu/GpuIndexCagra.h
176
179
  - vendor/faiss/faiss/gpu/GpuIndexFlat.h
177
180
  - vendor/faiss/faiss/gpu/GpuIndexIVF.h
178
181
  - vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h
@@ -200,11 +203,12 @@ files:
200
203
  - vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp
201
204
  - vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp
202
205
  - vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp
206
+ - vendor/faiss/faiss/gpu/test/TestGpuResidualQuantizer.cpp
203
207
  - vendor/faiss/faiss/gpu/test/TestUtils.cpp
204
208
  - vendor/faiss/faiss/gpu/test/TestUtils.h
205
209
  - vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp
210
+ - vendor/faiss/faiss/gpu/utils/CuvsUtils.h
206
211
  - vendor/faiss/faiss/gpu/utils/DeviceUtils.h
207
- - vendor/faiss/faiss/gpu/utils/RaftUtils.h
208
212
  - vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp
209
213
  - vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h
210
214
  - vendor/faiss/faiss/gpu/utils/StaticUtils.h
@@ -247,10 +251,12 @@ files:
247
251
  - vendor/faiss/faiss/impl/ThreadedIndex-inl.h
248
252
  - vendor/faiss/faiss/impl/ThreadedIndex.h
249
253
  - vendor/faiss/faiss/impl/code_distance/code_distance-avx2.h
254
+ - vendor/faiss/faiss/impl/code_distance/code_distance-avx512.h
250
255
  - vendor/faiss/faiss/impl/code_distance/code_distance-generic.h
256
+ - vendor/faiss/faiss/impl/code_distance/code_distance-sve.h
251
257
  - vendor/faiss/faiss/impl/code_distance/code_distance.h
252
- - vendor/faiss/faiss/impl/code_distance/code_distance_avx512.h
253
258
  - vendor/faiss/faiss/impl/index_read.cpp
259
+ - vendor/faiss/faiss/impl/index_read_utils.h
254
260
  - vendor/faiss/faiss/impl/index_write.cpp
255
261
  - vendor/faiss/faiss/impl/io.cpp
256
262
  - vendor/faiss/faiss/impl/io.h
@@ -285,6 +291,8 @@ files:
285
291
  - vendor/faiss/faiss/utils/AlignedTable.h
286
292
  - vendor/faiss/faiss/utils/Heap.cpp
287
293
  - vendor/faiss/faiss/utils/Heap.h
294
+ - vendor/faiss/faiss/utils/NeuralNet.cpp
295
+ - vendor/faiss/faiss/utils/NeuralNet.h
288
296
  - vendor/faiss/faiss/utils/WorkerThread.cpp
289
297
  - vendor/faiss/faiss/utils/WorkerThread.h
290
298
  - vendor/faiss/faiss/utils/approx_topk/approx_topk.h
@@ -292,6 +300,7 @@ files:
292
300
  - vendor/faiss/faiss/utils/approx_topk/generic.h
293
301
  - vendor/faiss/faiss/utils/approx_topk/mode.h
294
302
  - vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h
303
+ - vendor/faiss/faiss/utils/bf16.h
295
304
  - vendor/faiss/faiss/utils/distances.cpp
296
305
  - vendor/faiss/faiss/utils/distances.h
297
306
  - vendor/faiss/faiss/utils/distances_fused/avx512.cpp
@@ -312,6 +321,7 @@ files:
312
321
  - vendor/faiss/faiss/utils/hamming.cpp
313
322
  - vendor/faiss/faiss/utils/hamming.h
314
323
  - vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h
324
+ - vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h
315
325
  - vendor/faiss/faiss/utils/hamming_distance/common.h
316
326
  - vendor/faiss/faiss/utils/hamming_distance/generic-inl.h
317
327
  - vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h
@@ -326,18 +336,20 @@ files:
326
336
  - vendor/faiss/faiss/utils/random.h
327
337
  - vendor/faiss/faiss/utils/simdlib.h
328
338
  - vendor/faiss/faiss/utils/simdlib_avx2.h
339
+ - vendor/faiss/faiss/utils/simdlib_avx512.h
329
340
  - vendor/faiss/faiss/utils/simdlib_emulated.h
330
341
  - vendor/faiss/faiss/utils/simdlib_neon.h
342
+ - vendor/faiss/faiss/utils/simdlib_ppc64.h
331
343
  - vendor/faiss/faiss/utils/sorting.cpp
332
344
  - vendor/faiss/faiss/utils/sorting.h
333
345
  - vendor/faiss/faiss/utils/transpose/transpose-avx2-inl.h
346
+ - vendor/faiss/faiss/utils/transpose/transpose-avx512-inl.h
334
347
  - vendor/faiss/faiss/utils/utils.cpp
335
348
  - vendor/faiss/faiss/utils/utils.h
336
349
  homepage: https://github.com/ankane/faiss-ruby
337
350
  licenses:
338
351
  - MIT
339
352
  metadata: {}
340
- post_install_message:
341
353
  rdoc_options: []
342
354
  require_paths:
343
355
  - lib
@@ -352,8 +364,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
352
364
  - !ruby/object:Gem::Version
353
365
  version: '0'
354
366
  requirements: []
355
- rubygems_version: 3.5.3
356
- signing_key:
367
+ rubygems_version: 3.6.2
357
368
  specification_version: 4
358
369
  summary: Efficient similarity search and clustering for Ruby
359
370
  test_files: []
@@ -1,102 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its 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
- // // // AVX-512 version. It is not used, but let it be for the future
9
- // // // needs.
10
- // // template <class SearchResultType, typename T = PQDecoder>
11
- // // typename std::enable_if<(std::is_same<T, PQDecoder8>::value), void>::
12
- // // type distance_four_codes(
13
- // // const uint8_t* __restrict code0,
14
- // // const uint8_t* __restrict code1,
15
- // // const uint8_t* __restrict code2,
16
- // // const uint8_t* __restrict code3,
17
- // // float& result0,
18
- // // float& result1,
19
- // // float& result2,
20
- // // float& result3
21
- // // ) const {
22
- // // result0 = 0;
23
- // // result1 = 0;
24
- // // result2 = 0;
25
- // // result3 = 0;
26
-
27
- // // size_t m = 0;
28
- // // const size_t pqM16 = pq.M / 16;
29
-
30
- // // constexpr intptr_t N = 4;
31
-
32
- // // const float* tab = sim_table;
33
-
34
- // // if (pqM16 > 0) {
35
- // // // process 16 values per loop
36
- // // const __m512i ksub = _mm512_set1_epi32(pq.ksub);
37
- // // __m512i offsets_0 = _mm512_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7,
38
- // // 8, 9, 10, 11, 12, 13, 14, 15);
39
- // // offsets_0 = _mm512_mullo_epi32(offsets_0, ksub);
40
-
41
- // // // accumulators of partial sums
42
- // // __m512 partialSums[N];
43
- // // for (intptr_t j = 0; j < N; j++) {
44
- // // partialSums[j] = _mm512_setzero_ps();
45
- // // }
46
-
47
- // // // loop
48
- // // for (m = 0; m < pqM16 * 16; m += 16) {
49
- // // // load 16 uint8 values
50
- // // __m128i mm1[N];
51
- // // mm1[0] = _mm_loadu_si128((const __m128i_u*)(code0 + m));
52
- // // mm1[1] = _mm_loadu_si128((const __m128i_u*)(code1 + m));
53
- // // mm1[2] = _mm_loadu_si128((const __m128i_u*)(code2 + m));
54
- // // mm1[3] = _mm_loadu_si128((const __m128i_u*)(code3 + m));
55
-
56
- // // // process first 8 codes
57
- // // for (intptr_t j = 0; j < N; j++) {
58
- // // // convert uint8 values (low part of __m128i) to int32
59
- // // // values
60
- // // const __m512i idx1 = _mm512_cvtepu8_epi32(mm1[j]);
61
-
62
- // // // add offsets
63
- // // const __m512i indices_to_read_from =
64
- // // _mm512_add_epi32(idx1, offsets_0);
65
-
66
- // // // gather 8 values, similar to 8 operations of
67
- // // // tab[idx]
68
- // // __m512 collected =
69
- // // _mm512_i32gather_ps(
70
- // // indices_to_read_from, tab, sizeof(float));
71
-
72
- // // // collect partial sums
73
- // // partialSums[j] = _mm512_add_ps(partialSums[j],
74
- // // collected);
75
- // // }
76
- // // tab += pq.ksub * 16;
77
-
78
- // // }
79
-
80
- // // // horizontal sum for partialSum
81
- // // result0 += _mm512_reduce_add_ps(partialSums[0]);
82
- // // result1 += _mm512_reduce_add_ps(partialSums[1]);
83
- // // result2 += _mm512_reduce_add_ps(partialSums[2]);
84
- // // result3 += _mm512_reduce_add_ps(partialSums[3]);
85
- // // }
86
-
87
- // // //
88
- // // if (m < pq.M) {
89
- // // // process leftovers
90
- // // PQDecoder decoder0(code0 + m, pq.nbits);
91
- // // PQDecoder decoder1(code1 + m, pq.nbits);
92
- // // PQDecoder decoder2(code2 + m, pq.nbits);
93
- // // PQDecoder decoder3(code3 + m, pq.nbits);
94
- // // for (; m < pq.M; m++) {
95
- // // result0 += tab[decoder0.decode()];
96
- // // result1 += tab[decoder1.decode()];
97
- // // result2 += tab[decoder2.decode()];
98
- // // result3 += tab[decoder3.decode()];
99
- // // tab += pq.ksub;
100
- // // }
101
- // // }
102
- // // }