faiss 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/faiss/version.rb +1 -1
  4. data/vendor/faiss/faiss/AutoTune.cpp +292 -291
  5. data/vendor/faiss/faiss/AutoTune.h +55 -56
  6. data/vendor/faiss/faiss/Clustering.cpp +334 -195
  7. data/vendor/faiss/faiss/Clustering.h +88 -35
  8. data/vendor/faiss/faiss/IVFlib.cpp +171 -195
  9. data/vendor/faiss/faiss/IVFlib.h +48 -51
  10. data/vendor/faiss/faiss/Index.cpp +85 -103
  11. data/vendor/faiss/faiss/Index.h +54 -48
  12. data/vendor/faiss/faiss/Index2Layer.cpp +139 -164
  13. data/vendor/faiss/faiss/Index2Layer.h +22 -22
  14. data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
  15. data/vendor/faiss/faiss/IndexBinary.h +140 -132
  16. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
  17. data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
  18. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
  19. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
  20. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
  21. data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
  22. data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
  23. data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
  24. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
  25. data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
  26. data/vendor/faiss/faiss/IndexFlat.cpp +116 -147
  27. data/vendor/faiss/faiss/IndexFlat.h +35 -46
  28. data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
  29. data/vendor/faiss/faiss/IndexHNSW.h +57 -41
  30. data/vendor/faiss/faiss/IndexIVF.cpp +474 -454
  31. data/vendor/faiss/faiss/IndexIVF.h +146 -113
  32. data/vendor/faiss/faiss/IndexIVFFlat.cpp +248 -250
  33. data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
  34. data/vendor/faiss/faiss/IndexIVFPQ.cpp +457 -516
  35. data/vendor/faiss/faiss/IndexIVFPQ.h +74 -66
  36. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +406 -372
  37. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +82 -57
  38. data/vendor/faiss/faiss/IndexIVFPQR.cpp +104 -102
  39. data/vendor/faiss/faiss/IndexIVFPQR.h +33 -28
  40. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +125 -133
  41. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +19 -21
  42. data/vendor/faiss/faiss/IndexLSH.cpp +75 -96
  43. data/vendor/faiss/faiss/IndexLSH.h +21 -26
  44. data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
  45. data/vendor/faiss/faiss/IndexLattice.h +11 -16
  46. data/vendor/faiss/faiss/IndexNNDescent.cpp +231 -0
  47. data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
  48. data/vendor/faiss/faiss/IndexNSG.cpp +303 -0
  49. data/vendor/faiss/faiss/IndexNSG.h +85 -0
  50. data/vendor/faiss/faiss/IndexPQ.cpp +405 -464
  51. data/vendor/faiss/faiss/IndexPQ.h +64 -67
  52. data/vendor/faiss/faiss/IndexPQFastScan.cpp +143 -170
  53. data/vendor/faiss/faiss/IndexPQFastScan.h +46 -32
  54. data/vendor/faiss/faiss/IndexPreTransform.cpp +120 -150
  55. data/vendor/faiss/faiss/IndexPreTransform.h +33 -36
  56. data/vendor/faiss/faiss/IndexRefine.cpp +115 -131
  57. data/vendor/faiss/faiss/IndexRefine.h +22 -23
  58. data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
  59. data/vendor/faiss/faiss/IndexReplicas.h +62 -56
  60. data/vendor/faiss/faiss/IndexResidual.cpp +291 -0
  61. data/vendor/faiss/faiss/IndexResidual.h +152 -0
  62. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +120 -155
  63. data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -45
  64. data/vendor/faiss/faiss/IndexShards.cpp +256 -240
  65. data/vendor/faiss/faiss/IndexShards.h +85 -73
  66. data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
  67. data/vendor/faiss/faiss/MatrixStats.h +7 -10
  68. data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
  69. data/vendor/faiss/faiss/MetaIndexes.h +40 -34
  70. data/vendor/faiss/faiss/MetricType.h +7 -7
  71. data/vendor/faiss/faiss/VectorTransform.cpp +652 -474
  72. data/vendor/faiss/faiss/VectorTransform.h +61 -89
  73. data/vendor/faiss/faiss/clone_index.cpp +77 -73
  74. data/vendor/faiss/faiss/clone_index.h +4 -9
  75. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
  76. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
  77. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +197 -170
  78. data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
  79. data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
  80. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
  81. data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
  82. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
  83. data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
  84. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
  85. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
  86. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
  87. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
  88. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
  89. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
  90. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
  91. data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
  92. data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
  93. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
  94. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
  95. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
  96. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
  97. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
  98. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
  99. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
  100. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
  101. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
  102. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
  103. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
  104. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
  105. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
  106. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
  107. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
  108. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
  109. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
  110. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
  111. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
  112. data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
  113. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
  114. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
  115. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
  116. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
  117. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
  118. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
  119. data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
  120. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +270 -0
  121. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +115 -0
  122. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
  123. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
  124. data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
  125. data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
  126. data/vendor/faiss/faiss/impl/FaissException.h +41 -29
  127. data/vendor/faiss/faiss/impl/HNSW.cpp +595 -611
  128. data/vendor/faiss/faiss/impl/HNSW.h +179 -200
  129. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +672 -0
  130. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +172 -0
  131. data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
  132. data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
  133. data/vendor/faiss/faiss/impl/NSG.cpp +682 -0
  134. data/vendor/faiss/faiss/impl/NSG.h +199 -0
  135. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
  136. data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
  137. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
  138. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
  139. data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
  140. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +448 -0
  141. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +130 -0
  142. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
  143. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +648 -701
  144. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
  145. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
  146. data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
  147. data/vendor/faiss/faiss/impl/index_read.cpp +547 -479
  148. data/vendor/faiss/faiss/impl/index_write.cpp +497 -407
  149. data/vendor/faiss/faiss/impl/io.cpp +75 -94
  150. data/vendor/faiss/faiss/impl/io.h +31 -41
  151. data/vendor/faiss/faiss/impl/io_macros.h +40 -29
  152. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
  153. data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
  154. data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
  155. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
  156. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
  157. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
  158. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
  159. data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
  160. data/vendor/faiss/faiss/index_factory.cpp +269 -218
  161. data/vendor/faiss/faiss/index_factory.h +6 -7
  162. data/vendor/faiss/faiss/index_io.h +23 -26
  163. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
  164. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
  165. data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
  166. data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
  167. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
  168. data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
  169. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
  170. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
  171. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
  172. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
  173. data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
  174. data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
  175. data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
  176. data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
  177. data/vendor/faiss/faiss/utils/Heap.h +186 -209
  178. data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
  179. data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
  180. data/vendor/faiss/faiss/utils/distances.cpp +301 -310
  181. data/vendor/faiss/faiss/utils/distances.h +133 -118
  182. data/vendor/faiss/faiss/utils/distances_simd.cpp +456 -516
  183. data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
  184. data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
  185. data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
  186. data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
  187. data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
  188. data/vendor/faiss/faiss/utils/hamming.h +62 -85
  189. data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
  190. data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
  191. data/vendor/faiss/faiss/utils/partitioning.h +26 -21
  192. data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
  193. data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
  194. data/vendor/faiss/faiss/utils/random.cpp +39 -63
  195. data/vendor/faiss/faiss/utils/random.h +13 -16
  196. data/vendor/faiss/faiss/utils/simdlib.h +4 -2
  197. data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
  198. data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
  199. data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
  200. data/vendor/faiss/faiss/utils/utils.cpp +304 -287
  201. data/vendor/faiss/faiss/utils/utils.h +53 -48
  202. metadata +20 -2
@@ -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