faiss 0.1.7 → 0.2.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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +7 -7
  4. data/ext/faiss/ext.cpp +1 -1
  5. data/ext/faiss/extconf.rb +8 -2
  6. data/ext/faiss/index.cpp +102 -69
  7. data/ext/faiss/index_binary.cpp +24 -30
  8. data/ext/faiss/kmeans.cpp +20 -16
  9. data/ext/faiss/numo.hpp +867 -0
  10. data/ext/faiss/pca_matrix.cpp +13 -14
  11. data/ext/faiss/product_quantizer.cpp +23 -24
  12. data/ext/faiss/utils.cpp +10 -37
  13. data/ext/faiss/utils.h +2 -13
  14. data/lib/faiss/version.rb +1 -1
  15. data/lib/faiss.rb +0 -5
  16. data/vendor/faiss/faiss/AutoTune.cpp +292 -291
  17. data/vendor/faiss/faiss/AutoTune.h +55 -56
  18. data/vendor/faiss/faiss/Clustering.cpp +334 -195
  19. data/vendor/faiss/faiss/Clustering.h +88 -35
  20. data/vendor/faiss/faiss/IVFlib.cpp +171 -195
  21. data/vendor/faiss/faiss/IVFlib.h +48 -51
  22. data/vendor/faiss/faiss/Index.cpp +85 -103
  23. data/vendor/faiss/faiss/Index.h +54 -48
  24. data/vendor/faiss/faiss/Index2Layer.cpp +139 -164
  25. data/vendor/faiss/faiss/Index2Layer.h +22 -22
  26. data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
  27. data/vendor/faiss/faiss/IndexBinary.h +140 -132
  28. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
  29. data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
  30. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
  31. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
  32. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
  33. data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
  34. data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
  35. data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
  36. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
  37. data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
  38. data/vendor/faiss/faiss/IndexFlat.cpp +116 -147
  39. data/vendor/faiss/faiss/IndexFlat.h +35 -46
  40. data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
  41. data/vendor/faiss/faiss/IndexHNSW.h +57 -41
  42. data/vendor/faiss/faiss/IndexIVF.cpp +474 -454
  43. data/vendor/faiss/faiss/IndexIVF.h +146 -113
  44. data/vendor/faiss/faiss/IndexIVFFlat.cpp +248 -250
  45. data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
  46. data/vendor/faiss/faiss/IndexIVFPQ.cpp +457 -516
  47. data/vendor/faiss/faiss/IndexIVFPQ.h +74 -66
  48. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +406 -372
  49. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +82 -57
  50. data/vendor/faiss/faiss/IndexIVFPQR.cpp +104 -102
  51. data/vendor/faiss/faiss/IndexIVFPQR.h +33 -28
  52. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +125 -133
  53. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +19 -21
  54. data/vendor/faiss/faiss/IndexLSH.cpp +75 -96
  55. data/vendor/faiss/faiss/IndexLSH.h +21 -26
  56. data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
  57. data/vendor/faiss/faiss/IndexLattice.h +11 -16
  58. data/vendor/faiss/faiss/IndexNNDescent.cpp +231 -0
  59. data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
  60. data/vendor/faiss/faiss/IndexNSG.cpp +303 -0
  61. data/vendor/faiss/faiss/IndexNSG.h +85 -0
  62. data/vendor/faiss/faiss/IndexPQ.cpp +405 -464
  63. data/vendor/faiss/faiss/IndexPQ.h +64 -67
  64. data/vendor/faiss/faiss/IndexPQFastScan.cpp +143 -170
  65. data/vendor/faiss/faiss/IndexPQFastScan.h +46 -32
  66. data/vendor/faiss/faiss/IndexPreTransform.cpp +120 -150
  67. data/vendor/faiss/faiss/IndexPreTransform.h +33 -36
  68. data/vendor/faiss/faiss/IndexRefine.cpp +115 -131
  69. data/vendor/faiss/faiss/IndexRefine.h +22 -23
  70. data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
  71. data/vendor/faiss/faiss/IndexReplicas.h +62 -56
  72. data/vendor/faiss/faiss/IndexResidual.cpp +291 -0
  73. data/vendor/faiss/faiss/IndexResidual.h +152 -0
  74. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +120 -155
  75. data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -45
  76. data/vendor/faiss/faiss/IndexShards.cpp +256 -240
  77. data/vendor/faiss/faiss/IndexShards.h +85 -73
  78. data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
  79. data/vendor/faiss/faiss/MatrixStats.h +7 -10
  80. data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
  81. data/vendor/faiss/faiss/MetaIndexes.h +40 -34
  82. data/vendor/faiss/faiss/MetricType.h +7 -7
  83. data/vendor/faiss/faiss/VectorTransform.cpp +652 -474
  84. data/vendor/faiss/faiss/VectorTransform.h +61 -89
  85. data/vendor/faiss/faiss/clone_index.cpp +77 -73
  86. data/vendor/faiss/faiss/clone_index.h +4 -9
  87. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
  88. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
  89. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +197 -170
  90. data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
  91. data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
  92. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
  93. data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
  94. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
  95. data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
  96. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
  97. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
  98. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
  99. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
  100. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
  101. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
  102. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
  103. data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
  104. data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
  105. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
  106. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
  107. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
  108. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
  109. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
  110. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
  111. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
  112. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
  113. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
  114. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
  115. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
  116. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
  117. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
  118. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
  119. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
  120. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
  121. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
  122. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
  123. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
  124. data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
  125. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
  126. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
  127. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
  128. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
  129. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
  130. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
  131. data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
  132. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +270 -0
  133. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +115 -0
  134. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
  135. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
  136. data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
  137. data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
  138. data/vendor/faiss/faiss/impl/FaissException.h +41 -29
  139. data/vendor/faiss/faiss/impl/HNSW.cpp +595 -611
  140. data/vendor/faiss/faiss/impl/HNSW.h +179 -200
  141. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +672 -0
  142. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +172 -0
  143. data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
  144. data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
  145. data/vendor/faiss/faiss/impl/NSG.cpp +682 -0
  146. data/vendor/faiss/faiss/impl/NSG.h +199 -0
  147. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
  148. data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
  149. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
  150. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
  151. data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
  152. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +448 -0
  153. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +130 -0
  154. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
  155. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +648 -701
  156. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
  157. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
  158. data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
  159. data/vendor/faiss/faiss/impl/index_read.cpp +547 -479
  160. data/vendor/faiss/faiss/impl/index_write.cpp +497 -407
  161. data/vendor/faiss/faiss/impl/io.cpp +75 -94
  162. data/vendor/faiss/faiss/impl/io.h +31 -41
  163. data/vendor/faiss/faiss/impl/io_macros.h +40 -29
  164. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
  165. data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
  166. data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
  167. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
  168. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
  169. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
  170. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
  171. data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
  172. data/vendor/faiss/faiss/index_factory.cpp +269 -218
  173. data/vendor/faiss/faiss/index_factory.h +6 -7
  174. data/vendor/faiss/faiss/index_io.h +23 -26
  175. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
  176. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
  177. data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
  178. data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
  179. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
  180. data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
  181. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
  182. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
  183. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
  184. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
  185. data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
  186. data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
  187. data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
  188. data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
  189. data/vendor/faiss/faiss/utils/Heap.h +186 -209
  190. data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
  191. data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
  192. data/vendor/faiss/faiss/utils/distances.cpp +301 -310
  193. data/vendor/faiss/faiss/utils/distances.h +133 -118
  194. data/vendor/faiss/faiss/utils/distances_simd.cpp +456 -516
  195. data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
  196. data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
  197. data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
  198. data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
  199. data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
  200. data/vendor/faiss/faiss/utils/hamming.h +62 -85
  201. data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
  202. data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
  203. data/vendor/faiss/faiss/utils/partitioning.h +26 -21
  204. data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
  205. data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
  206. data/vendor/faiss/faiss/utils/random.cpp +39 -63
  207. data/vendor/faiss/faiss/utils/random.h +13 -16
  208. data/vendor/faiss/faiss/utils/simdlib.h +4 -2
  209. data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
  210. data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
  211. data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
  212. data/vendor/faiss/faiss/utils/utils.cpp +304 -287
  213. data/vendor/faiss/faiss/utils/utils.h +53 -48
  214. metadata +26 -12
  215. data/lib/faiss/index.rb +0 -20
  216. data/lib/faiss/index_binary.rb +0 -20
  217. data/lib/faiss/kmeans.rb +0 -15
  218. data/lib/faiss/pca_matrix.rb +0 -15
  219. data/lib/faiss/product_quantizer.rb +0 -22
@@ -20,10 +20,8 @@
20
20
  * parallel compile times. Templates are instanciated explicitly.
21
21
  */
22
22
 
23
-
24
23
  namespace faiss {
25
24
 
26
-
27
25
  /** Pack codes for consumption by the SIMD kernels.
28
26
  * The unused bytes are set to 0.
29
27
  *
@@ -36,11 +34,13 @@ namespace faiss {
36
34
  * @param blocks output array, size nb * nsq / 2.
37
35
  */
38
36
  void pq4_pack_codes(
39
- const uint8_t *codes,
40
- size_t ntotal, size_t M,
41
- size_t nb, size_t bbs, size_t M2,
42
- uint8_t * blocks
43
- );
37
+ const uint8_t* codes,
38
+ size_t ntotal,
39
+ size_t M,
40
+ size_t nb,
41
+ size_t bbs,
42
+ size_t M2,
43
+ uint8_t* blocks);
44
44
 
45
45
  /** Same as pack_codes but write in a given range of the output,
46
46
  * leaving the rest untouched. Assumes allocated entries are 0 on input.
@@ -51,12 +51,13 @@ void pq4_pack_codes(
51
51
  * @param blocks output array, size at least ceil(i1 / bbs) * bbs * nsq / 2
52
52
  */
53
53
  void pq4_pack_codes_range(
54
- const uint8_t *codes,
54
+ const uint8_t* codes,
55
55
  size_t M,
56
- size_t i0, size_t i1,
57
- size_t bbs, size_t M2,
58
- uint8_t * blocks
59
- );
56
+ size_t i0,
57
+ size_t i1,
58
+ size_t bbs,
59
+ size_t M2,
60
+ uint8_t* blocks);
60
61
 
61
62
  /** get a single element from a packed codes table
62
63
  *
@@ -64,9 +65,11 @@ void pq4_pack_codes_range(
64
65
  * @param sq subquantizer (< nsq)
65
66
  */
66
67
  uint8_t pq4_get_packed_element(
67
- const uint8_t *data, size_t bbs, size_t nsq,
68
- size_t i, size_t sq
69
- );
68
+ const uint8_t* data,
69
+ size_t bbs,
70
+ size_t nsq,
71
+ size_t i,
72
+ size_t sq);
70
73
 
71
74
  /** Pack Look-up table for consumption by the kernel.
72
75
  *
@@ -75,13 +78,7 @@ uint8_t pq4_get_packed_element(
75
78
  * @param src input array, size (nq, 16)
76
79
  * @param dest output array, size (nq, 16)
77
80
  */
78
- void pq4_pack_LUT(
79
- int nq, int nsq,
80
- const uint8_t *src,
81
- uint8_t *dest
82
- );
83
-
84
-
81
+ void pq4_pack_LUT(int nq, int nsq, const uint8_t* src, uint8_t* dest);
85
82
 
86
83
  /** Loop over database elements and accumulate results into result handler
87
84
  *
@@ -92,16 +89,15 @@ void pq4_pack_LUT(
92
89
  * @param codes packed codes array
93
90
  * @param LUT packed look-up table
94
91
  */
95
- template<class ResultHandler>
92
+ template <class ResultHandler>
96
93
  void pq4_accumulate_loop(
97
94
  int nq,
98
- size_t nb, int bbs,
95
+ size_t nb,
96
+ int bbs,
99
97
  int nsq,
100
- const uint8_t *codes,
101
- const uint8_t *LUT,
102
- ResultHandler & res);
103
-
104
-
98
+ const uint8_t* codes,
99
+ const uint8_t* LUT,
100
+ ResultHandler& res);
105
101
 
106
102
  /* qbs versions, supported only for bbs=32.
107
103
  *
@@ -115,8 +111,7 @@ void pq4_accumulate_loop(
115
111
  * nq = 3 + 2 + 2 + 1 = 6 queries. For a given total block size, the optimal
116
112
  * decomposition into sub-blocks (measured empirically) is given by
117
113
  * preferred_qbs().
118
- */
119
-
114
+ */
120
115
 
121
116
  /* compute the number of queries from a base-16 decomposition */
122
117
  int pq4_qbs_to_nq(int qbs);
@@ -133,18 +128,16 @@ int pq4_preferred_qbs(int nq);
133
128
  * @param dest output array, size (nq, 16)
134
129
  * @return nq
135
130
  */
136
- int pq4_pack_LUT_qbs(
137
- int fqbs, int nsq,
138
- const uint8_t *src,
139
- uint8_t *dest
140
- );
131
+ int pq4_pack_LUT_qbs(int fqbs, int nsq, const uint8_t* src, uint8_t* dest);
141
132
 
142
- /** Same as pq4_pack_LUT_qbs, except the source vectors are remapped with q_map */
133
+ /** Same as pq4_pack_LUT_qbs, except the source vectors are remapped with q_map
134
+ */
143
135
  int pq4_pack_LUT_qbs_q_map(
144
- int qbs, int nsq,
145
- const uint8_t *src,
146
- const int * q_map,
147
- uint8_t *dest);
136
+ int qbs,
137
+ int nsq,
138
+ const uint8_t* src,
139
+ const int* q_map,
140
+ uint8_t* dest);
148
141
 
149
142
  /** Run accumulation loop.
150
143
  *
@@ -155,15 +148,13 @@ int pq4_pack_LUT_qbs_q_map(
155
148
  * @param LUT look-up table (packed)
156
149
  * @param res call-back for the resutls
157
150
  */
158
- template<class ResultHandler>
151
+ template <class ResultHandler>
159
152
  void pq4_accumulate_loop_qbs(
160
153
  int qbs,
161
154
  size_t nb,
162
155
  int nsq,
163
- const uint8_t *codes,
164
- const uint8_t *LUT,
165
- ResultHandler & res);
166
-
167
-
156
+ const uint8_t* codes,
157
+ const uint8_t* LUT,
158
+ ResultHandler& res);
168
159
 
169
- } // namespace faiss
160
+ } // namespace faiss
@@ -5,16 +5,13 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
-
9
8
  #include <faiss/impl/pq4_fast_scan.h>
10
9
 
11
10
  #include <faiss/impl/FaissAssert.h>
12
11
  #include <faiss/impl/simd_result_handlers.h>
13
12
 
14
-
15
13
  namespace faiss {
16
14
 
17
-
18
15
  using namespace simd_result_handlers;
19
16
 
20
17
  /***************************************************************
@@ -29,18 +26,17 @@ namespace {
29
26
  * writes results in a ResultHandler
30
27
  */
31
28
 
32
- template<int NQ, int BB, class ResultHandler>
29
+ template <int NQ, int BB, class ResultHandler>
33
30
  void kernel_accumulate_block(
34
31
  int nsq,
35
- const uint8_t *codes,
36
- const uint8_t *LUT,
37
- ResultHandler & res)
38
- {
32
+ const uint8_t* codes,
33
+ const uint8_t* LUT,
34
+ ResultHandler& res) {
39
35
  // distance accumulators
40
36
  simd16uint16 accu[NQ][BB][4];
41
37
 
42
- for(int q = 0; q < NQ; q++) {
43
- for(int b = 0; b < BB; b++) {
38
+ for (int q = 0; q < NQ; q++) {
39
+ for (int b = 0; b < BB; b++) {
44
40
  accu[q][b][0].clear();
45
41
  accu[q][b][1].clear();
46
42
  accu[q][b][2].clear();
@@ -48,9 +44,9 @@ void kernel_accumulate_block(
48
44
  }
49
45
  }
50
46
 
51
- for(int sq = 0; sq < nsq; sq += 2) {
47
+ for (int sq = 0; sq < nsq; sq += 2) {
52
48
  simd32uint8 lut_cache[NQ];
53
- for(int q = 0; q < NQ; q++) {
49
+ for (int q = 0; q < NQ; q++) {
54
50
  lut_cache[q] = simd32uint8(LUT);
55
51
  LUT += 32;
56
52
  }
@@ -62,7 +58,7 @@ void kernel_accumulate_block(
62
58
  simd32uint8 chi = simd32uint8(simd16uint16(c) >> 4) & mask;
63
59
  simd32uint8 clo = c & mask;
64
60
 
65
- for(int q = 0; q < NQ; q++) {
61
+ for (int q = 0; q < NQ; q++) {
66
62
  simd32uint8 lut = lut_cache[q];
67
63
  simd32uint8 res0 = lut.lookup_2_lanes(clo);
68
64
  simd32uint8 res1 = lut.lookup_2_lanes(chi);
@@ -76,9 +72,8 @@ void kernel_accumulate_block(
76
72
  }
77
73
  }
78
74
 
79
- for(int q = 0; q < NQ; q++) {
75
+ for (int q = 0; q < NQ; q++) {
80
76
  for (int b = 0; b < BB; b++) {
81
-
82
77
  accu[q][b][0] -= accu[q][b][1] << 8;
83
78
  simd16uint16 dis0 = combine2x2(accu[q][b][0], accu[q][b][1]);
84
79
 
@@ -88,19 +83,15 @@ void kernel_accumulate_block(
88
83
  res.handle(q, b, dis0, dis1);
89
84
  }
90
85
  }
91
-
92
-
93
86
  }
94
87
 
95
-
96
- template<int NQ, int BB, class ResultHandler>
88
+ template <int NQ, int BB, class ResultHandler>
97
89
  void accumulate_fixed_blocks(
98
90
  size_t nb,
99
91
  int nsq,
100
- const uint8_t *codes,
101
- const uint8_t *LUT,
102
- ResultHandler & res)
103
- {
92
+ const uint8_t* codes,
93
+ const uint8_t* LUT,
94
+ ResultHandler& res) {
104
95
  constexpr int bbs = 32 * BB;
105
96
  for (int64_t j0 = 0; j0 < nb; j0 += bbs) {
106
97
  FixedStorageHandler<NQ, 2 * BB> res2;
@@ -111,29 +102,28 @@ void accumulate_fixed_blocks(
111
102
  }
112
103
  }
113
104
 
114
-
115
105
  } // anonymous namespace
116
106
 
117
- template<class ResultHandler>
107
+ template <class ResultHandler>
118
108
  void pq4_accumulate_loop(
119
109
  int nq,
120
- size_t nb, int bbs,
110
+ size_t nb,
111
+ int bbs,
121
112
  int nsq,
122
- const uint8_t *codes,
123
- const uint8_t *LUT,
124
- ResultHandler & res)
125
- {
113
+ const uint8_t* codes,
114
+ const uint8_t* LUT,
115
+ ResultHandler& res) {
126
116
  FAISS_THROW_IF_NOT(is_aligned_pointer(codes));
127
117
  FAISS_THROW_IF_NOT(is_aligned_pointer(LUT));
128
118
  FAISS_THROW_IF_NOT(bbs % 32 == 0);
129
119
  FAISS_THROW_IF_NOT(nb % bbs == 0);
130
120
 
131
- #define DISPATCH(NQ, BB) \
132
- case NQ * 1000 + BB: \
133
- accumulate_fixed_blocks<NQ, BB>(nb, nsq, codes, LUT, res); \
134
- break
121
+ #define DISPATCH(NQ, BB) \
122
+ case NQ * 1000 + BB: \
123
+ accumulate_fixed_blocks<NQ, BB>(nb, nsq, codes, LUT, res); \
124
+ break
135
125
 
136
- switch(nq * 1000 + bbs / 32) {
126
+ switch (nq * 1000 + bbs / 32) {
137
127
  DISPATCH(1, 1);
138
128
  DISPATCH(1, 2);
139
129
  DISPATCH(1, 3);
@@ -143,26 +133,28 @@ void pq4_accumulate_loop(
143
133
  DISPATCH(2, 2);
144
134
  DISPATCH(3, 1);
145
135
  DISPATCH(4, 1);
146
- default:
147
- FAISS_THROW_FMT("nq=%d bbs=%d not instantiated", nq, bbs);
136
+ default:
137
+ FAISS_THROW_FMT("nq=%d bbs=%d not instantiated", nq, bbs);
148
138
  }
149
139
  #undef DISPATCH
150
-
151
140
  }
152
141
 
153
142
  // explicit template instantiations
154
143
 
155
-
156
-
157
-
158
- #define INSTANTIATE_ACCUMULATE(TH, C, with_id_map) \
159
- template void pq4_accumulate_loop<TH<C, with_id_map>> \
160
- (int, size_t, int, int, const uint8_t *, const uint8_t *, TH<C, with_id_map> &);
161
-
162
- #define INSTANTIATE_3(C, with_id_map) \
163
- INSTANTIATE_ACCUMULATE(SingleResultHandler, C, with_id_map) \
164
- INSTANTIATE_ACCUMULATE(HeapHandler, C, with_id_map) \
165
- INSTANTIATE_ACCUMULATE(ReservoirHandler, C, with_id_map) \
144
+ #define INSTANTIATE_ACCUMULATE(TH, C, with_id_map) \
145
+ template void pq4_accumulate_loop<TH<C, with_id_map>>( \
146
+ int, \
147
+ size_t, \
148
+ int, \
149
+ int, \
150
+ const uint8_t*, \
151
+ const uint8_t*, \
152
+ TH<C, with_id_map>&);
153
+
154
+ #define INSTANTIATE_3(C, with_id_map) \
155
+ INSTANTIATE_ACCUMULATE(SingleResultHandler, C, with_id_map) \
156
+ INSTANTIATE_ACCUMULATE(HeapHandler, C, with_id_map) \
157
+ INSTANTIATE_ACCUMULATE(ReservoirHandler, C, with_id_map)
166
158
 
167
159
  using Csi = CMax<uint16_t, int>;
168
160
  INSTANTIATE_3(Csi, false);
@@ -174,7 +166,4 @@ INSTANTIATE_3(Csl, true);
174
166
  using CslMin = CMin<uint16_t, int64_t>;
175
167
  INSTANTIATE_3(CslMin, true);
176
168
 
177
-
178
-
179
169
  } // namespace faiss
180
-