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
@@ -9,73 +9,91 @@
9
9
 
10
10
  #include <vector>
11
11
 
12
+ #include <faiss/Clustering.h>
12
13
  #include <faiss/Index.h>
13
14
  #include <faiss/clone_index.h>
14
15
  #include <faiss/gpu/GpuClonerOptions.h>
15
16
  #include <faiss/gpu/GpuIndex.h>
16
17
  #include <faiss/gpu/GpuIndicesOptions.h>
17
-
18
- namespace faiss { namespace gpu {
18
+ namespace faiss {
19
+ namespace gpu {
19
20
 
20
21
  class GpuResourcesProvider;
21
22
 
22
23
  /// Cloner specialized for GPU -> CPU
23
- struct ToCPUCloner: faiss::Cloner {
24
- void merge_index(Index *dst, Index *src, bool successive_ids);
25
- Index *clone_Index(const Index *index) override;
24
+ struct ToCPUCloner : faiss::Cloner {
25
+ void merge_index(Index* dst, Index* src, bool successive_ids);
26
+ Index* clone_Index(const Index* index) override;
26
27
  };
27
28
 
28
-
29
29
  /// Cloner specialized for CPU -> 1 GPU
30
- struct ToGpuCloner: faiss::Cloner, GpuClonerOptions {
31
- GpuResourcesProvider *provider;
30
+ struct ToGpuCloner : faiss::Cloner, GpuClonerOptions {
31
+ GpuResourcesProvider* provider;
32
32
  int device;
33
33
 
34
- ToGpuCloner(GpuResourcesProvider *prov, int device,
35
- const GpuClonerOptions &options);
36
-
37
- Index *clone_Index(const Index *index) override;
34
+ ToGpuCloner(
35
+ GpuResourcesProvider* prov,
36
+ int device,
37
+ const GpuClonerOptions& options);
38
38
 
39
+ Index* clone_Index(const Index* index) override;
39
40
  };
40
41
 
41
42
  /// Cloner specialized for CPU -> multiple GPUs
42
- struct ToGpuClonerMultiple: faiss::Cloner, GpuMultipleClonerOptions {
43
+ struct ToGpuClonerMultiple : faiss::Cloner, GpuMultipleClonerOptions {
43
44
  std::vector<ToGpuCloner> sub_cloners;
44
45
 
45
- ToGpuClonerMultiple(std::vector<GpuResourcesProvider *> & provider,
46
- std::vector<int>& devices,
47
- const GpuMultipleClonerOptions &options);
46
+ ToGpuClonerMultiple(
47
+ std::vector<GpuResourcesProvider*>& provider,
48
+ std::vector<int>& devices,
49
+ const GpuMultipleClonerOptions& options);
48
50
 
49
- ToGpuClonerMultiple(const std::vector<ToGpuCloner> & sub_cloners,
50
- const GpuMultipleClonerOptions &options);
51
+ ToGpuClonerMultiple(
52
+ const std::vector<ToGpuCloner>& sub_cloners,
53
+ const GpuMultipleClonerOptions& options);
51
54
 
52
- void copy_ivf_shard (const IndexIVF *index_ivf, IndexIVF *idx2,
53
- long n, long i);
55
+ void copy_ivf_shard(
56
+ const IndexIVF* index_ivf,
57
+ IndexIVF* idx2,
58
+ long n,
59
+ long i);
54
60
 
55
- Index * clone_Index_to_shards (const Index *index);
61
+ Index* clone_Index_to_shards(const Index* index);
56
62
 
57
63
  /// main function
58
- Index *clone_Index(const Index *index) override;
64
+ Index* clone_Index(const Index* index) override;
59
65
  };
60
66
 
67
+ /// converts any GPU index inside gpu_index to a CPU index
68
+ faiss::Index* index_gpu_to_cpu(const faiss::Index* gpu_index);
61
69
 
70
+ /// converts any CPU index that can be converted to GPU
71
+ faiss::Index* index_cpu_to_gpu(
72
+ GpuResourcesProvider* provider,
73
+ int device,
74
+ const faiss::Index* index,
75
+ const GpuClonerOptions* options = nullptr);
62
76
 
77
+ faiss::Index* index_cpu_to_gpu_multiple(
78
+ std::vector<GpuResourcesProvider*>& provider,
79
+ std::vector<int>& devices,
80
+ const faiss::Index* index,
81
+ const GpuMultipleClonerOptions* options = nullptr);
63
82
 
64
- /// converts any GPU index inside gpu_index to a CPU index
65
- faiss::Index * index_gpu_to_cpu(const faiss::Index *gpu_index);
83
+ /// index factory for the ProgressiveDimClustering object
66
84
 
67
- /// converts any CPU index that can be converted to GPU
68
- faiss::Index * index_cpu_to_gpu(
69
- GpuResourcesProvider* provider, int device,
70
- const faiss::Index *index,
71
- const GpuClonerOptions *options = nullptr);
85
+ struct GpuProgressiveDimIndexFactory : ProgressiveDimIndexFactory {
86
+ GpuMultipleClonerOptions options;
87
+ std::vector<GpuResourcesProvider*> vres;
88
+ std::vector<int> devices;
89
+ int ncall;
72
90
 
73
- faiss::Index * index_cpu_to_gpu_multiple(
74
- std::vector<GpuResourcesProvider*> & provider,
75
- std::vector<int> &devices,
76
- const faiss::Index *index,
77
- const GpuMultipleClonerOptions *options = nullptr);
91
+ explicit GpuProgressiveDimIndexFactory(int ngpu);
78
92
 
93
+ Index* operator()(int dim) override;
79
94
 
95
+ virtual ~GpuProgressiveDimIndexFactory() override;
96
+ };
80
97
 
81
- } } // namespace
98
+ } // namespace gpu
99
+ } // namespace faiss
@@ -7,22 +7,20 @@
7
7
 
8
8
  #include <faiss/gpu/GpuClonerOptions.h>
9
9
 
10
- namespace faiss { namespace gpu {
10
+ namespace faiss {
11
+ namespace gpu {
11
12
 
12
13
  GpuClonerOptions::GpuClonerOptions()
13
- : indicesOptions(INDICES_64_BIT),
14
- useFloat16CoarseQuantizer(false),
15
- useFloat16(false),
16
- usePrecomputed(false),
17
- reserveVecs(0),
18
- storeTransposed(false),
19
- verbose(false) {
20
- }
14
+ : indicesOptions(INDICES_64_BIT),
15
+ useFloat16CoarseQuantizer(false),
16
+ useFloat16(false),
17
+ usePrecomputed(false),
18
+ reserveVecs(0),
19
+ storeTransposed(false),
20
+ verbose(false) {}
21
21
 
22
22
  GpuMultipleClonerOptions::GpuMultipleClonerOptions()
23
- : shard(false),
24
- shard_type(1)
25
- {
26
- }
23
+ : shard(false), shard_type(1) {}
27
24
 
28
- } } // namespace
25
+ } // namespace gpu
26
+ } // namespace faiss
@@ -9,45 +9,47 @@
9
9
 
10
10
  #include <faiss/gpu/GpuIndicesOptions.h>
11
11
 
12
- namespace faiss { namespace gpu {
12
+ namespace faiss {
13
+ namespace gpu {
13
14
 
14
15
  /// set some options on how to copy to GPU
15
16
  struct GpuClonerOptions {
16
- GpuClonerOptions();
17
+ GpuClonerOptions();
17
18
 
18
- /// how should indices be stored on index types that support indices
19
- /// (anything but GpuIndexFlat*)?
20
- IndicesOptions indicesOptions;
19
+ /// how should indices be stored on index types that support indices
20
+ /// (anything but GpuIndexFlat*)?
21
+ IndicesOptions indicesOptions;
21
22
 
22
- /// is the coarse quantizer in float16?
23
- bool useFloat16CoarseQuantizer;
23
+ /// is the coarse quantizer in float16?
24
+ bool useFloat16CoarseQuantizer;
24
25
 
25
- /// for GpuIndexIVFFlat, is storage in float16?
26
- /// for GpuIndexIVFPQ, are intermediate calculations in float16?
27
- bool useFloat16;
26
+ /// for GpuIndexIVFFlat, is storage in float16?
27
+ /// for GpuIndexIVFPQ, are intermediate calculations in float16?
28
+ bool useFloat16;
28
29
 
29
- /// use precomputed tables?
30
- bool usePrecomputed;
30
+ /// use precomputed tables?
31
+ bool usePrecomputed;
31
32
 
32
- /// reserve vectors in the invfiles?
33
- long reserveVecs;
33
+ /// reserve vectors in the invfiles?
34
+ long reserveVecs;
34
35
 
35
- /// For GpuIndexFlat, store data in transposed layout?
36
- bool storeTransposed;
36
+ /// For GpuIndexFlat, store data in transposed layout?
37
+ bool storeTransposed;
37
38
 
38
- /// Set verbose options on the index
39
- bool verbose;
39
+ /// Set verbose options on the index
40
+ bool verbose;
40
41
  };
41
42
 
42
43
  struct GpuMultipleClonerOptions : public GpuClonerOptions {
43
- GpuMultipleClonerOptions ();
44
+ GpuMultipleClonerOptions();
44
45
 
45
- /// Whether to shard the index across GPUs, versus replication
46
- /// across GPUs
47
- bool shard;
46
+ /// Whether to shard the index across GPUs, versus replication
47
+ /// across GPUs
48
+ bool shard;
48
49
 
49
- /// IndexIVF::copy_subset_to subset type
50
- int shard_type;
50
+ /// IndexIVF::copy_subset_to subset type
51
+ int shard_type;
51
52
  };
52
53
 
53
- } } // namespace
54
+ } // namespace gpu
55
+ } // namespace faiss
@@ -5,111 +5,113 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
-
9
8
  #pragma once
10
9
 
11
10
  #include <faiss/Index.h>
12
11
 
13
- namespace faiss { namespace gpu {
12
+ namespace faiss {
13
+ namespace gpu {
14
14
 
15
15
  class GpuResourcesProvider;
16
16
 
17
17
  // Scalar type of the vector data
18
18
  enum class DistanceDataType {
19
- F32 = 1,
20
- F16,
19
+ F32 = 1,
20
+ F16,
21
21
  };
22
22
 
23
23
  // Scalar type of the indices data
24
24
  enum class IndicesDataType {
25
- I64 = 1,
26
- I32,
25
+ I64 = 1,
26
+ I32,
27
27
  };
28
28
 
29
29
  /// Arguments to brute-force GPU k-nearest neighbor searching
30
30
  struct GpuDistanceParams {
31
- GpuDistanceParams()
32
- : metric(faiss::MetricType::METRIC_L2),
33
- metricArg(0),
34
- k(0),
35
- dims(0),
36
- vectors(nullptr),
37
- vectorType(DistanceDataType::F32),
38
- vectorsRowMajor(true),
39
- numVectors(0),
40
- vectorNorms(nullptr),
41
- queries(nullptr),
42
- queryType(DistanceDataType::F32),
43
- queriesRowMajor(true),
44
- numQueries(0),
45
- outDistances(nullptr),
46
- ignoreOutDistances(false),
47
- outIndicesType(IndicesDataType::I64),
48
- outIndices(nullptr) {
49
- }
50
-
51
- //
52
- // Search parameters
53
- //
54
-
55
- // Search parameter: distance metric
56
- faiss::MetricType metric;
57
-
58
- // Search parameter: distance metric argument (if applicable)
59
- // For metric == METRIC_Lp, this is the p-value
60
- float metricArg;
61
-
62
- // Search parameter: return k nearest neighbors
63
- int k;
64
-
65
- // Vector dimensionality
66
- int dims;
67
-
68
- //
69
- // Vectors being queried
70
- //
71
-
72
- // If vectorsRowMajor is true, this is
73
- // numVectors x dims, with dims innermost; otherwise,
74
- // dims x numVectors, with numVectors innermost
75
- const void* vectors;
76
- DistanceDataType vectorType;
77
- bool vectorsRowMajor;
78
- int numVectors;
79
-
80
- // Precomputed L2 norms for each vector in `vectors`, which can be optionally
81
- // provided in advance to speed computation for METRIC_L2
82
- const float* vectorNorms;
83
-
84
- //
85
- // The query vectors (i.e., find k-nearest neighbors in `vectors` for each of
86
- // the `queries`
87
- //
88
-
89
- // If queriesRowMajor is true, this is
90
- // numQueries x dims, with dims innermost; otherwise,
91
- // dims x numQueries, with numQueries innermost
92
- const void* queries;
93
- DistanceDataType queryType;
94
- bool queriesRowMajor;
95
- int numQueries;
96
-
97
- //
98
- // Output results
99
- //
100
-
101
- // A region of memory size numQueries x k, with k
102
- // innermost (row major)
103
- float* outDistances;
104
-
105
- // Do we only care abouty the indices reported, rather than the output
106
- // distances?
107
- bool ignoreOutDistances;
108
-
109
- // A region of memory size numQueries x k, with k
110
- // innermost (row major)
111
- IndicesDataType outIndicesType;
112
- void* outIndices;
31
+ GpuDistanceParams()
32
+ : metric(faiss::MetricType::METRIC_L2),
33
+ metricArg(0),
34
+ k(0),
35
+ dims(0),
36
+ vectors(nullptr),
37
+ vectorType(DistanceDataType::F32),
38
+ vectorsRowMajor(true),
39
+ numVectors(0),
40
+ vectorNorms(nullptr),
41
+ queries(nullptr),
42
+ queryType(DistanceDataType::F32),
43
+ queriesRowMajor(true),
44
+ numQueries(0),
45
+ outDistances(nullptr),
46
+ ignoreOutDistances(false),
47
+ outIndicesType(IndicesDataType::I64),
48
+ outIndices(nullptr) {}
49
+
50
+ //
51
+ // Search parameters
52
+ //
53
+
54
+ /// Search parameter: distance metric
55
+ faiss::MetricType metric;
56
+
57
+ /// Search parameter: distance metric argument (if applicable)
58
+ /// For metric == METRIC_Lp, this is the p-value
59
+ float metricArg;
60
+
61
+ /// Search parameter: return k nearest neighbors
62
+ /// If the value provided is -1, then we report all pairwise distances
63
+ /// without top-k filtering
64
+ int k;
65
+
66
+ /// Vector dimensionality
67
+ int dims;
68
+
69
+ //
70
+ // Vectors being queried
71
+ //
72
+
73
+ /// If vectorsRowMajor is true, this is
74
+ /// numVectors x dims, with dims innermost; otherwise,
75
+ /// dims x numVectors, with numVectors innermost
76
+ const void* vectors;
77
+ DistanceDataType vectorType;
78
+ bool vectorsRowMajor;
79
+ int numVectors;
80
+
81
+ /// Precomputed L2 norms for each vector in `vectors`, which can be
82
+ /// optionally provided in advance to speed computation for METRIC_L2
83
+ const float* vectorNorms;
84
+
85
+ //
86
+ // The query vectors (i.e., find k-nearest neighbors in `vectors` for each
87
+ // of the `queries`
88
+ //
89
+
90
+ /// If queriesRowMajor is true, this is
91
+ /// numQueries x dims, with dims innermost; otherwise,
92
+ /// dims x numQueries, with numQueries innermost
93
+ const void* queries;
94
+ DistanceDataType queryType;
95
+ bool queriesRowMajor;
96
+ int numQueries;
97
+
98
+ //
99
+ // Output results
100
+ //
101
+
102
+ /// A region of memory size numQueries x k, with k
103
+ /// innermost (row major) if k > 0, or if k == -1, a region of memory of
104
+ /// size numQueries x numVectors
105
+ float* outDistances;
106
+
107
+ /// Do we only care about the indices reported, rather than the output
108
+ /// distances? Not used if k == -1 (all pairwise distances)
109
+ bool ignoreOutDistances;
110
+
111
+ /// A region of memory size numQueries x k, with k
112
+ /// innermost (row major). Not used if k == -1 (all pairwise distances)
113
+ IndicesDataType outIndicesType;
114
+ void* outIndices;
113
115
  };
114
116
 
115
117
  /// A wrapper for gpu/impl/Distance.cuh to expose direct brute-force k-nearest
@@ -127,27 +129,29 @@ struct GpuDistanceParams {
127
129
  void bfKnn(GpuResourcesProvider* resources, const GpuDistanceParams& args);
128
130
 
129
131
  /// Deprecated legacy implementation
130
- void bruteForceKnn(GpuResourcesProvider* resources,
131
- faiss::MetricType metric,
132
- // If vectorsRowMajor is true, this is
133
- // numVectors x dims, with dims innermost; otherwise,
134
- // dims x numVectors, with numVectors innermost
135
- const float* vectors,
136
- bool vectorsRowMajor,
137
- int numVectors,
138
- // If queriesRowMajor is true, this is
139
- // numQueries x dims, with dims innermost; otherwise,
140
- // dims x numQueries, with numQueries innermost
141
- const float* queries,
142
- bool queriesRowMajor,
143
- int numQueries,
144
- int dims,
145
- int k,
146
- // A region of memory size numQueries x k, with k
147
- // innermost (row major)
148
- float* outDistances,
149
- // A region of memory size numQueries x k, with k
150
- // innermost (row major)
151
- Index::idx_t* outIndices);
152
-
153
- } } // namespace
132
+ void bruteForceKnn(
133
+ GpuResourcesProvider* resources,
134
+ faiss::MetricType metric,
135
+ // If vectorsRowMajor is true, this is
136
+ // numVectors x dims, with dims innermost; otherwise,
137
+ // dims x numVectors, with numVectors innermost
138
+ const float* vectors,
139
+ bool vectorsRowMajor,
140
+ int numVectors,
141
+ // If queriesRowMajor is true, this is
142
+ // numQueries x dims, with dims innermost; otherwise,
143
+ // dims x numQueries, with numQueries innermost
144
+ const float* queries,
145
+ bool queriesRowMajor,
146
+ int numQueries,
147
+ int dims,
148
+ int k,
149
+ // A region of memory size numQueries x k, with k
150
+ // innermost (row major)
151
+ float* outDistances,
152
+ // A region of memory size numQueries x k, with k
153
+ // innermost (row major)
154
+ Index::idx_t* outIndices);
155
+
156
+ } // namespace gpu
157
+ } // namespace faiss
@@ -5,12 +5,11 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
-
9
8
  #ifndef GPU_FAISS_ASSERT_INCLUDED
10
9
  #define GPU_FAISS_ASSERT_INCLUDED
11
10
 
12
- #include <faiss/impl/FaissAssert.h>
13
11
  #include <cuda.h>
12
+ #include <faiss/impl/FaissAssert.h>
14
13
 
15
14
  ///
16
15
  /// Assertions