faiss 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/ext/faiss/extconf.rb +1 -1
  4. data/lib/faiss/version.rb +1 -1
  5. data/vendor/faiss/benchs/bench_6bit_codec.cpp +80 -0
  6. data/vendor/faiss/c_api/AutoTune_c.h +2 -0
  7. data/vendor/faiss/c_api/IndexShards_c.cpp +0 -6
  8. data/vendor/faiss/c_api/IndexShards_c.h +1 -4
  9. data/vendor/faiss/c_api/gpu/GpuAutoTune_c.cpp +4 -2
  10. data/vendor/faiss/c_api/gpu/GpuClonerOptions_c.cpp +1 -1
  11. data/vendor/faiss/c_api/gpu/GpuIndex_c.cpp +1 -1
  12. data/vendor/faiss/c_api/gpu/GpuResources_c.cpp +1 -1
  13. data/vendor/faiss/c_api/gpu/StandardGpuResources_c.cpp +1 -1
  14. data/vendor/faiss/demos/demo_imi_flat.cpp +5 -2
  15. data/vendor/faiss/demos/demo_imi_pq.cpp +6 -2
  16. data/vendor/faiss/demos/demo_ivfpq_indexing.cpp +7 -2
  17. data/vendor/faiss/{AutoTune.cpp → faiss/AutoTune.cpp} +9 -9
  18. data/vendor/faiss/{AutoTune.h → faiss/AutoTune.h} +0 -0
  19. data/vendor/faiss/{Clustering.cpp → faiss/Clustering.cpp} +13 -12
  20. data/vendor/faiss/{Clustering.h → faiss/Clustering.h} +0 -0
  21. data/vendor/faiss/{DirectMap.cpp → faiss/DirectMap.cpp} +0 -0
  22. data/vendor/faiss/{DirectMap.h → faiss/DirectMap.h} +0 -0
  23. data/vendor/faiss/{IVFlib.cpp → faiss/IVFlib.cpp} +86 -11
  24. data/vendor/faiss/{IVFlib.h → faiss/IVFlib.h} +26 -8
  25. data/vendor/faiss/{Index.cpp → faiss/Index.cpp} +0 -0
  26. data/vendor/faiss/{Index.h → faiss/Index.h} +1 -1
  27. data/vendor/faiss/{Index2Layer.cpp → faiss/Index2Layer.cpp} +12 -11
  28. data/vendor/faiss/{Index2Layer.h → faiss/Index2Layer.h} +0 -0
  29. data/vendor/faiss/{IndexBinary.cpp → faiss/IndexBinary.cpp} +2 -1
  30. data/vendor/faiss/{IndexBinary.h → faiss/IndexBinary.h} +0 -0
  31. data/vendor/faiss/{IndexBinaryFlat.cpp → faiss/IndexBinaryFlat.cpp} +0 -0
  32. data/vendor/faiss/{IndexBinaryFlat.h → faiss/IndexBinaryFlat.h} +0 -0
  33. data/vendor/faiss/{IndexBinaryFromFloat.cpp → faiss/IndexBinaryFromFloat.cpp} +1 -0
  34. data/vendor/faiss/{IndexBinaryFromFloat.h → faiss/IndexBinaryFromFloat.h} +0 -0
  35. data/vendor/faiss/{IndexBinaryHNSW.cpp → faiss/IndexBinaryHNSW.cpp} +1 -2
  36. data/vendor/faiss/{IndexBinaryHNSW.h → faiss/IndexBinaryHNSW.h} +0 -0
  37. data/vendor/faiss/{IndexBinaryHash.cpp → faiss/IndexBinaryHash.cpp} +16 -7
  38. data/vendor/faiss/{IndexBinaryHash.h → faiss/IndexBinaryHash.h} +2 -1
  39. data/vendor/faiss/{IndexBinaryIVF.cpp → faiss/IndexBinaryIVF.cpp} +10 -16
  40. data/vendor/faiss/{IndexBinaryIVF.h → faiss/IndexBinaryIVF.h} +1 -1
  41. data/vendor/faiss/{IndexFlat.cpp → faiss/IndexFlat.cpp} +0 -0
  42. data/vendor/faiss/{IndexFlat.h → faiss/IndexFlat.h} +0 -0
  43. data/vendor/faiss/{IndexHNSW.cpp → faiss/IndexHNSW.cpp} +63 -32
  44. data/vendor/faiss/{IndexHNSW.h → faiss/IndexHNSW.h} +0 -0
  45. data/vendor/faiss/{IndexIVF.cpp → faiss/IndexIVF.cpp} +129 -46
  46. data/vendor/faiss/{IndexIVF.h → faiss/IndexIVF.h} +7 -3
  47. data/vendor/faiss/{IndexIVFFlat.cpp → faiss/IndexIVFFlat.cpp} +6 -5
  48. data/vendor/faiss/{IndexIVFFlat.h → faiss/IndexIVFFlat.h} +0 -0
  49. data/vendor/faiss/{IndexIVFPQ.cpp → faiss/IndexIVFPQ.cpp} +9 -8
  50. data/vendor/faiss/{IndexIVFPQ.h → faiss/IndexIVFPQ.h} +4 -2
  51. data/vendor/faiss/{IndexIVFPQR.cpp → faiss/IndexIVFPQR.cpp} +3 -1
  52. data/vendor/faiss/{IndexIVFPQR.h → faiss/IndexIVFPQR.h} +0 -0
  53. data/vendor/faiss/{IndexIVFSpectralHash.cpp → faiss/IndexIVFSpectralHash.cpp} +1 -1
  54. data/vendor/faiss/{IndexIVFSpectralHash.h → faiss/IndexIVFSpectralHash.h} +0 -0
  55. data/vendor/faiss/{IndexLSH.cpp → faiss/IndexLSH.cpp} +0 -0
  56. data/vendor/faiss/{IndexLSH.h → faiss/IndexLSH.h} +0 -0
  57. data/vendor/faiss/{IndexLattice.cpp → faiss/IndexLattice.cpp} +0 -0
  58. data/vendor/faiss/{IndexLattice.h → faiss/IndexLattice.h} +0 -0
  59. data/vendor/faiss/{IndexPQ.cpp → faiss/IndexPQ.cpp} +6 -6
  60. data/vendor/faiss/{IndexPQ.h → faiss/IndexPQ.h} +3 -1
  61. data/vendor/faiss/{IndexPreTransform.cpp → faiss/IndexPreTransform.cpp} +0 -0
  62. data/vendor/faiss/{IndexPreTransform.h → faiss/IndexPreTransform.h} +0 -0
  63. data/vendor/faiss/{IndexReplicas.cpp → faiss/IndexReplicas.cpp} +102 -10
  64. data/vendor/faiss/{IndexReplicas.h → faiss/IndexReplicas.h} +6 -0
  65. data/vendor/faiss/{IndexScalarQuantizer.cpp → faiss/IndexScalarQuantizer.cpp} +3 -3
  66. data/vendor/faiss/{IndexScalarQuantizer.h → faiss/IndexScalarQuantizer.h} +0 -0
  67. data/vendor/faiss/{IndexShards.cpp → faiss/IndexShards.cpp} +37 -12
  68. data/vendor/faiss/{IndexShards.h → faiss/IndexShards.h} +3 -4
  69. data/vendor/faiss/{InvertedLists.cpp → faiss/InvertedLists.cpp} +2 -2
  70. data/vendor/faiss/{InvertedLists.h → faiss/InvertedLists.h} +1 -0
  71. data/vendor/faiss/{MatrixStats.cpp → faiss/MatrixStats.cpp} +0 -0
  72. data/vendor/faiss/{MatrixStats.h → faiss/MatrixStats.h} +0 -0
  73. data/vendor/faiss/{MetaIndexes.cpp → faiss/MetaIndexes.cpp} +5 -3
  74. data/vendor/faiss/{MetaIndexes.h → faiss/MetaIndexes.h} +0 -0
  75. data/vendor/faiss/{MetricType.h → faiss/MetricType.h} +0 -0
  76. data/vendor/faiss/{OnDiskInvertedLists.cpp → faiss/OnDiskInvertedLists.cpp} +141 -3
  77. data/vendor/faiss/{OnDiskInvertedLists.h → faiss/OnDiskInvertedLists.h} +27 -7
  78. data/vendor/faiss/{VectorTransform.cpp → faiss/VectorTransform.cpp} +4 -3
  79. data/vendor/faiss/{VectorTransform.h → faiss/VectorTransform.h} +0 -0
  80. data/vendor/faiss/{clone_index.cpp → faiss/clone_index.cpp} +0 -0
  81. data/vendor/faiss/{clone_index.h → faiss/clone_index.h} +0 -0
  82. data/vendor/faiss/{gpu → faiss/gpu}/GpuAutoTune.cpp +0 -0
  83. data/vendor/faiss/{gpu → faiss/gpu}/GpuAutoTune.h +0 -0
  84. data/vendor/faiss/{gpu → faiss/gpu}/GpuCloner.cpp +14 -14
  85. data/vendor/faiss/{gpu → faiss/gpu}/GpuCloner.h +6 -7
  86. data/vendor/faiss/{gpu → faiss/gpu}/GpuClonerOptions.cpp +0 -0
  87. data/vendor/faiss/{gpu → faiss/gpu}/GpuClonerOptions.h +0 -0
  88. data/vendor/faiss/{gpu → faiss/gpu}/GpuDistance.h +12 -4
  89. data/vendor/faiss/{gpu → faiss/gpu}/GpuFaissAssert.h +0 -0
  90. data/vendor/faiss/{gpu → faiss/gpu}/GpuIndex.h +3 -9
  91. data/vendor/faiss/{gpu → faiss/gpu}/GpuIndexBinaryFlat.h +7 -7
  92. data/vendor/faiss/{gpu → faiss/gpu}/GpuIndexFlat.h +35 -10
  93. data/vendor/faiss/{gpu → faiss/gpu}/GpuIndexIVF.h +1 -2
  94. data/vendor/faiss/{gpu → faiss/gpu}/GpuIndexIVFFlat.h +4 -3
  95. data/vendor/faiss/{gpu → faiss/gpu}/GpuIndexIVFPQ.h +21 -4
  96. data/vendor/faiss/{gpu → faiss/gpu}/GpuIndexIVFScalarQuantizer.h +4 -3
  97. data/vendor/faiss/{gpu → faiss/gpu}/GpuIndicesOptions.h +0 -0
  98. data/vendor/faiss/faiss/gpu/GpuResources.cpp +200 -0
  99. data/vendor/faiss/faiss/gpu/GpuResources.h +264 -0
  100. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +572 -0
  101. data/vendor/faiss/{gpu → faiss/gpu}/StandardGpuResources.h +83 -15
  102. data/vendor/faiss/{gpu → faiss/gpu}/impl/RemapIndices.cpp +0 -0
  103. data/vendor/faiss/{gpu → faiss/gpu}/impl/RemapIndices.h +0 -0
  104. data/vendor/faiss/{gpu → faiss/gpu}/perf/IndexWrapper-inl.h +1 -1
  105. data/vendor/faiss/{gpu → faiss/gpu}/perf/IndexWrapper.h +1 -1
  106. data/vendor/faiss/{gpu → faiss/gpu}/perf/PerfClustering.cpp +1 -1
  107. data/vendor/faiss/{gpu → faiss/gpu}/perf/PerfIVFPQAdd.cpp +0 -0
  108. data/vendor/faiss/{gpu → faiss/gpu}/perf/WriteIndex.cpp +0 -0
  109. data/vendor/faiss/{gpu → faiss/gpu}/test/TestGpuIndexBinaryFlat.cpp +0 -0
  110. data/vendor/faiss/{gpu → faiss/gpu}/test/TestGpuIndexFlat.cpp +1 -1
  111. data/vendor/faiss/{gpu → faiss/gpu}/test/TestGpuIndexIVFFlat.cpp +0 -0
  112. data/vendor/faiss/{gpu → faiss/gpu}/test/TestGpuIndexIVFPQ.cpp +141 -52
  113. data/vendor/faiss/{gpu → faiss/gpu}/test/TestGpuMemoryException.cpp +0 -0
  114. data/vendor/faiss/{gpu → faiss/gpu}/test/TestUtils.cpp +4 -2
  115. data/vendor/faiss/{gpu → faiss/gpu}/test/TestUtils.h +0 -0
  116. data/vendor/faiss/{gpu → faiss/gpu}/test/demo_ivfpq_indexing_gpu.cpp +7 -5
  117. data/vendor/faiss/{gpu → faiss/gpu}/utils/DeviceUtils.h +1 -1
  118. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +213 -0
  119. data/vendor/faiss/{gpu → faiss/gpu}/utils/StackDeviceMemory.h +25 -40
  120. data/vendor/faiss/{gpu → faiss/gpu}/utils/StaticUtils.h +0 -0
  121. data/vendor/faiss/{gpu → faiss/gpu}/utils/Timer.cpp +0 -0
  122. data/vendor/faiss/{gpu → faiss/gpu}/utils/Timer.h +0 -0
  123. data/vendor/faiss/{impl → faiss/impl}/AuxIndexStructures.cpp +1 -0
  124. data/vendor/faiss/{impl → faiss/impl}/AuxIndexStructures.h +3 -1
  125. data/vendor/faiss/{impl → faiss/impl}/FaissAssert.h +1 -0
  126. data/vendor/faiss/{impl → faiss/impl}/FaissException.cpp +26 -0
  127. data/vendor/faiss/{impl → faiss/impl}/FaissException.h +4 -0
  128. data/vendor/faiss/{impl → faiss/impl}/HNSW.cpp +26 -26
  129. data/vendor/faiss/{impl → faiss/impl}/HNSW.h +19 -11
  130. data/vendor/faiss/{impl → faiss/impl}/PolysemousTraining.cpp +1 -1
  131. data/vendor/faiss/{impl → faiss/impl}/PolysemousTraining.h +1 -1
  132. data/vendor/faiss/{impl → faiss/impl}/ProductQuantizer-inl.h +0 -1
  133. data/vendor/faiss/{impl → faiss/impl}/ProductQuantizer.cpp +9 -9
  134. data/vendor/faiss/{impl → faiss/impl}/ProductQuantizer.h +0 -0
  135. data/vendor/faiss/{impl → faiss/impl}/ScalarQuantizer.cpp +63 -39
  136. data/vendor/faiss/{impl → faiss/impl}/ScalarQuantizer.h +1 -1
  137. data/vendor/faiss/{impl → faiss/impl}/ThreadedIndex-inl.h +0 -0
  138. data/vendor/faiss/{impl → faiss/impl}/ThreadedIndex.h +0 -0
  139. data/vendor/faiss/{impl → faiss/impl}/index_read.cpp +99 -116
  140. data/vendor/faiss/{impl → faiss/impl}/index_write.cpp +15 -50
  141. data/vendor/faiss/{impl → faiss/impl}/io.cpp +15 -10
  142. data/vendor/faiss/{impl → faiss/impl}/io.h +22 -8
  143. data/vendor/faiss/faiss/impl/io_macros.h +57 -0
  144. data/vendor/faiss/{impl → faiss/impl}/lattice_Zn.cpp +52 -36
  145. data/vendor/faiss/{impl → faiss/impl}/lattice_Zn.h +3 -3
  146. data/vendor/faiss/faiss/impl/platform_macros.h +24 -0
  147. data/vendor/faiss/{index_factory.cpp → faiss/index_factory.cpp} +33 -12
  148. data/vendor/faiss/{index_factory.h → faiss/index_factory.h} +0 -0
  149. data/vendor/faiss/{index_io.h → faiss/index_io.h} +55 -1
  150. data/vendor/faiss/faiss/python/python_callbacks.cpp +112 -0
  151. data/vendor/faiss/faiss/python/python_callbacks.h +45 -0
  152. data/vendor/faiss/{utils → faiss/utils}/Heap.cpp +5 -5
  153. data/vendor/faiss/{utils → faiss/utils}/Heap.h +1 -3
  154. data/vendor/faiss/{utils → faiss/utils}/WorkerThread.cpp +0 -0
  155. data/vendor/faiss/{utils → faiss/utils}/WorkerThread.h +0 -0
  156. data/vendor/faiss/{utils → faiss/utils}/distances.cpp +28 -13
  157. data/vendor/faiss/{utils → faiss/utils}/distances.h +2 -1
  158. data/vendor/faiss/{utils → faiss/utils}/distances_simd.cpp +5 -5
  159. data/vendor/faiss/{utils → faiss/utils}/extra_distances.cpp +8 -7
  160. data/vendor/faiss/{utils → faiss/utils}/extra_distances.h +0 -0
  161. data/vendor/faiss/{utils → faiss/utils}/hamming-inl.h +1 -3
  162. data/vendor/faiss/{utils → faiss/utils}/hamming.cpp +8 -7
  163. data/vendor/faiss/{utils → faiss/utils}/hamming.h +7 -1
  164. data/vendor/faiss/{utils → faiss/utils}/random.cpp +5 -5
  165. data/vendor/faiss/{utils → faiss/utils}/random.h +0 -0
  166. data/vendor/faiss/{utils → faiss/utils}/utils.cpp +27 -28
  167. data/vendor/faiss/{utils → faiss/utils}/utils.h +4 -0
  168. data/vendor/faiss/misc/test_blas.cpp +4 -1
  169. data/vendor/faiss/tests/test_binary_flat.cpp +0 -2
  170. data/vendor/faiss/tests/test_dealloc_invlists.cpp +6 -1
  171. data/vendor/faiss/tests/test_ivfpq_codec.cpp +4 -1
  172. data/vendor/faiss/tests/test_ivfpq_indexing.cpp +6 -4
  173. data/vendor/faiss/tests/test_lowlevel_ivf.cpp +12 -5
  174. data/vendor/faiss/tests/test_merge.cpp +6 -3
  175. data/vendor/faiss/tests/test_ondisk_ivf.cpp +7 -2
  176. data/vendor/faiss/tests/test_pairs_decoding.cpp +5 -1
  177. data/vendor/faiss/tests/test_params_override.cpp +7 -2
  178. data/vendor/faiss/tests/test_sliding_ivf.cpp +10 -4
  179. data/vendor/faiss/tutorial/cpp/1-Flat.cpp +14 -8
  180. data/vendor/faiss/tutorial/cpp/2-IVFFlat.cpp +11 -7
  181. data/vendor/faiss/tutorial/cpp/3-IVFPQ.cpp +12 -7
  182. data/vendor/faiss/tutorial/cpp/4-GPU.cpp +6 -3
  183. data/vendor/faiss/tutorial/cpp/5-Multiple-GPUs.cpp +7 -3
  184. metadata +154 -153
  185. data/vendor/faiss/gpu/GpuResources.cpp +0 -52
  186. data/vendor/faiss/gpu/GpuResources.h +0 -73
  187. data/vendor/faiss/gpu/StandardGpuResources.cpp +0 -303
  188. data/vendor/faiss/gpu/utils/DeviceMemory.cpp +0 -77
  189. data/vendor/faiss/gpu/utils/DeviceMemory.h +0 -71
  190. data/vendor/faiss/gpu/utils/MemorySpace.cpp +0 -89
  191. data/vendor/faiss/gpu/utils/MemorySpace.h +0 -44
  192. data/vendor/faiss/gpu/utils/StackDeviceMemory.cpp +0 -239
@@ -9,6 +9,7 @@
9
9
 
10
10
  #include <faiss/VectorTransform.h>
11
11
 
12
+ #include <cinttypes>
12
13
  #include <cstdio>
13
14
  #include <cmath>
14
15
  #include <cstring>
@@ -270,7 +271,7 @@ void RandomRotationMatrix::init (int seed)
270
271
  is_trained = true;
271
272
  }
272
273
 
273
- void RandomRotationMatrix::train (Index::idx_t /*n*/, const float */*x*/)
274
+ void RandomRotationMatrix::train (Index::idx_t /*n*/, const float * /*x*/)
274
275
  {
275
276
  // initialize with some arbitrary seed
276
277
  init (12345);
@@ -867,7 +868,7 @@ void OPQMatrix::train (Index::idx_t n, const float *x)
867
868
 
868
869
  if (verbose) {
869
870
  printf ("OPQMatrix::train: training an OPQ rotation matrix "
870
- "for M=%d from %ld vectors in %dD -> %dD\n",
871
+ "for M=%d from %" PRId64 " vectors in %dD -> %dD\n",
871
872
  M, n, d_in, d_out);
872
873
  }
873
874
 
@@ -895,7 +896,7 @@ void OPQMatrix::train (Index::idx_t n, const float *x)
895
896
  A.resize (d * d);
896
897
  rotation = A.data();
897
898
  if (verbose)
898
- printf(" OPQMatrix::train: making random %ld*%ld rotation\n",
899
+ printf(" OPQMatrix::train: making random %zd*%zd rotation\n",
899
900
  d, d);
900
901
  float_randn (rotation, d * d, 1234);
901
902
  matrix_qr (d, d, rotation);
@@ -114,9 +114,9 @@ faiss::Index * index_gpu_to_cpu(const faiss::Index *gpu_index)
114
114
  * Cloning to 1 GPU
115
115
  **********************************************************/
116
116
 
117
- ToGpuCloner::ToGpuCloner(GpuResources *resources, int device,
117
+ ToGpuCloner::ToGpuCloner(GpuResourcesProvider *prov, int device,
118
118
  const GpuClonerOptions &options):
119
- GpuClonerOptions(options), resources(resources), device(device)
119
+ GpuClonerOptions(options), provider(prov), device(device)
120
120
  {}
121
121
 
122
122
  Index *ToGpuCloner::clone_Index(const Index *index)
@@ -127,7 +127,7 @@ Index *ToGpuCloner::clone_Index(const Index *index)
127
127
  config.useFloat16 = useFloat16;
128
128
  config.storeTransposed = storeTransposed;
129
129
 
130
- return new GpuIndexFlat(resources, ifl, config);
130
+ return new GpuIndexFlat(provider, ifl, config);
131
131
  } else if(auto ifl = dynamic_cast<const faiss::IndexIVFFlat *>(index)) {
132
132
  GpuIndexIVFFlatConfig config;
133
133
  config.device = device;
@@ -136,7 +136,7 @@ Index *ToGpuCloner::clone_Index(const Index *index)
136
136
  config.flatConfig.storeTransposed = storeTransposed;
137
137
 
138
138
  GpuIndexIVFFlat *res =
139
- new GpuIndexIVFFlat(resources,
139
+ new GpuIndexIVFFlat(provider,
140
140
  ifl->d,
141
141
  ifl->nlist,
142
142
  ifl->metric_type,
@@ -156,7 +156,7 @@ Index *ToGpuCloner::clone_Index(const Index *index)
156
156
  config.flatConfig.storeTransposed = storeTransposed;
157
157
 
158
158
  GpuIndexIVFScalarQuantizer *res =
159
- new GpuIndexIVFScalarQuantizer(resources,
159
+ new GpuIndexIVFScalarQuantizer(provider,
160
160
  ifl->d,
161
161
  ifl->nlist,
162
162
  ifl->sq.qtype,
@@ -184,7 +184,7 @@ Index *ToGpuCloner::clone_Index(const Index *index)
184
184
  config.useFloat16LookupTables = useFloat16;
185
185
  config.usePrecomputedTables = usePrecomputed;
186
186
 
187
- GpuIndexIVFPQ *res = new GpuIndexIVFPQ(resources, ipq, config);
187
+ GpuIndexIVFPQ *res = new GpuIndexIVFPQ(provider, ipq, config);
188
188
 
189
189
  if(reserveVecs > 0 && ipq->ntotal == 0) {
190
190
  res->reserveMemory(reserveVecs);
@@ -198,12 +198,12 @@ Index *ToGpuCloner::clone_Index(const Index *index)
198
198
 
199
199
 
200
200
  faiss::Index * index_cpu_to_gpu(
201
- GpuResources* resources, int device,
201
+ GpuResourcesProvider* provider, int device,
202
202
  const faiss::Index *index,
203
203
  const GpuClonerOptions *options)
204
204
  {
205
205
  GpuClonerOptions defaults;
206
- ToGpuCloner cl(resources, device, options ? *options : defaults);
206
+ ToGpuCloner cl(provider, device, options ? *options : defaults);
207
207
  return cl.clone_Index(index);
208
208
  }
209
209
 
@@ -213,14 +213,14 @@ faiss::Index * index_cpu_to_gpu(
213
213
  **********************************************************/
214
214
 
215
215
  ToGpuClonerMultiple::ToGpuClonerMultiple(
216
- std::vector<GpuResources *> & resources,
216
+ std::vector<GpuResourcesProvider *> & provider,
217
217
  std::vector<int>& devices,
218
218
  const GpuMultipleClonerOptions &options):
219
219
  GpuMultipleClonerOptions(options)
220
220
  {
221
- FAISS_ASSERT(resources.size() == devices.size());
222
- for(int i = 0; i < resources.size(); i++) {
223
- sub_cloners.push_back(ToGpuCloner(resources[i], devices[i], options));
221
+ FAISS_ASSERT(provider.size() == devices.size());
222
+ for(int i = 0; i < provider.size(); i++) {
223
+ sub_cloners.push_back(ToGpuCloner(provider[i], devices[i], options));
224
224
  }
225
225
  }
226
226
 
@@ -394,13 +394,13 @@ Index *ToGpuClonerMultiple::clone_Index(const Index *index)
394
394
 
395
395
 
396
396
  faiss::Index * index_cpu_to_gpu_multiple(
397
- std::vector<GpuResources*> & resources,
397
+ std::vector<GpuResourcesProvider*> & provider,
398
398
  std::vector<int> &devices,
399
399
  const faiss::Index *index,
400
400
  const GpuMultipleClonerOptions *options)
401
401
  {
402
402
  GpuMultipleClonerOptions defaults;
403
- ToGpuClonerMultiple cl(resources, devices, options ? *options : defaults);
403
+ ToGpuClonerMultiple cl(provider, devices, options ? *options : defaults);
404
404
  return cl.clone_Index(index);
405
405
  }
406
406
 
@@ -17,8 +17,7 @@
17
17
 
18
18
  namespace faiss { namespace gpu {
19
19
 
20
- class GpuResources;
21
-
20
+ class GpuResourcesProvider;
22
21
 
23
22
  /// Cloner specialized for GPU -> CPU
24
23
  struct ToCPUCloner: faiss::Cloner {
@@ -29,10 +28,10 @@ struct ToCPUCloner: faiss::Cloner {
29
28
 
30
29
  /// Cloner specialized for CPU -> 1 GPU
31
30
  struct ToGpuCloner: faiss::Cloner, GpuClonerOptions {
32
- GpuResources *resources;
31
+ GpuResourcesProvider *provider;
33
32
  int device;
34
33
 
35
- ToGpuCloner(GpuResources *resources, int device,
34
+ ToGpuCloner(GpuResourcesProvider *prov, int device,
36
35
  const GpuClonerOptions &options);
37
36
 
38
37
  Index *clone_Index(const Index *index) override;
@@ -43,7 +42,7 @@ struct ToGpuCloner: faiss::Cloner, GpuClonerOptions {
43
42
  struct ToGpuClonerMultiple: faiss::Cloner, GpuMultipleClonerOptions {
44
43
  std::vector<ToGpuCloner> sub_cloners;
45
44
 
46
- ToGpuClonerMultiple(std::vector<GpuResources *> & resources,
45
+ ToGpuClonerMultiple(std::vector<GpuResourcesProvider *> & provider,
47
46
  std::vector<int>& devices,
48
47
  const GpuMultipleClonerOptions &options);
49
48
 
@@ -67,12 +66,12 @@ faiss::Index * index_gpu_to_cpu(const faiss::Index *gpu_index);
67
66
 
68
67
  /// converts any CPU index that can be converted to GPU
69
68
  faiss::Index * index_cpu_to_gpu(
70
- GpuResources* resources, int device,
69
+ GpuResourcesProvider* provider, int device,
71
70
  const faiss::Index *index,
72
71
  const GpuClonerOptions *options = nullptr);
73
72
 
74
73
  faiss::Index * index_cpu_to_gpu_multiple(
75
- std::vector<GpuResources*> & resources,
74
+ std::vector<GpuResourcesProvider*> & provider,
76
75
  std::vector<int> &devices,
77
76
  const faiss::Index *index,
78
77
  const GpuMultipleClonerOptions *options = nullptr);
@@ -12,7 +12,7 @@
12
12
 
13
13
  namespace faiss { namespace gpu {
14
14
 
15
- class GpuResources;
15
+ class GpuResourcesProvider;
16
16
 
17
17
  // Scalar type of the vector data
18
18
  enum class DistanceDataType {
@@ -20,6 +20,12 @@ enum class DistanceDataType {
20
20
  F16,
21
21
  };
22
22
 
23
+ // Scalar type of the indices data
24
+ enum class IndicesDataType {
25
+ I64 = 1,
26
+ I32,
27
+ };
28
+
23
29
  /// Arguments to brute-force GPU k-nearest neighbor searching
24
30
  struct GpuDistanceParams {
25
31
  GpuDistanceParams()
@@ -38,6 +44,7 @@ struct GpuDistanceParams {
38
44
  numQueries(0),
39
45
  outDistances(nullptr),
40
46
  ignoreOutDistances(false),
47
+ outIndicesType(IndicesDataType::I64),
41
48
  outIndices(nullptr) {
42
49
  }
43
50
 
@@ -101,7 +108,8 @@ struct GpuDistanceParams {
101
108
 
102
109
  // A region of memory size numQueries x k, with k
103
110
  // innermost (row major)
104
- faiss::Index::idx_t* outIndices;
111
+ IndicesDataType outIndicesType;
112
+ void* outIndices;
105
113
  };
106
114
 
107
115
  /// A wrapper for gpu/impl/Distance.cuh to expose direct brute-force k-nearest
@@ -116,10 +124,10 @@ struct GpuDistanceParams {
116
124
  ///
117
125
  /// For each vector in `queries`, searches all of `vectors` to find its k
118
126
  /// nearest neighbors with respect to the given metric
119
- void bfKnn(GpuResources* resources, const GpuDistanceParams& args);
127
+ void bfKnn(GpuResourcesProvider* resources, const GpuDistanceParams& args);
120
128
 
121
129
  /// Deprecated legacy implementation
122
- void bruteForceKnn(GpuResources* resources,
130
+ void bruteForceKnn(GpuResourcesProvider* resources,
123
131
  faiss::MetricType metric,
124
132
  // If vectorsRowMajor is true, this is
125
133
  // numVectors x dims, with dims innermost; otherwise,
@@ -9,12 +9,10 @@
9
9
  #pragma once
10
10
 
11
11
  #include <faiss/Index.h>
12
- #include <faiss/gpu/utils/MemorySpace.h>
12
+ #include <faiss/gpu/GpuResources.h>
13
13
 
14
14
  namespace faiss { namespace gpu {
15
15
 
16
- class GpuResources;
17
-
18
16
  struct GpuIndexConfig {
19
17
  inline GpuIndexConfig()
20
18
  : device(0),
@@ -32,7 +30,7 @@ struct GpuIndexConfig {
32
30
 
33
31
  class GpuIndex : public faiss::Index {
34
32
  public:
35
- GpuIndex(GpuResources* resources,
33
+ GpuIndex(std::shared_ptr<GpuResources> resources,
36
34
  int dims,
37
35
  faiss::MetricType metric,
38
36
  float metricArg,
@@ -42,10 +40,6 @@ class GpuIndex : public faiss::Index {
42
40
  return device_;
43
41
  }
44
42
 
45
- inline GpuResources* getResources() {
46
- return resources_;
47
- }
48
-
49
43
  /// Set the minimum data size for searches (in MiB) for which we use
50
44
  /// CPU -> GPU paging
51
45
  void setMinPagingSize(size_t size);
@@ -140,7 +134,7 @@ private:
140
134
 
141
135
  protected:
142
136
  /// Manages streams, cuBLAS handles and scratch memory for devices
143
- GpuResources* resources_;
137
+ std::shared_ptr<GpuResources> resources_;
144
138
 
145
139
  /// The GPU device we are resident on
146
140
  const int device_;
@@ -9,11 +9,12 @@
9
9
 
10
10
  #include <faiss/IndexBinaryFlat.h>
11
11
  #include <faiss/gpu/GpuIndex.h>
12
+ #include <faiss/gpu/GpuResources.h>
13
+ #include <memory>
12
14
 
13
15
  namespace faiss { namespace gpu {
14
16
 
15
17
  class BinaryFlatIndex;
16
- class GpuResources;
17
18
 
18
19
  struct GpuIndexBinaryFlatConfig : public GpuIndexConfig {
19
20
  };
@@ -24,13 +25,13 @@ class GpuIndexBinaryFlat : public IndexBinary {
24
25
  public:
25
26
  /// Construct from a pre-existing faiss::IndexBinaryFlat instance, copying
26
27
  /// data over to the given GPU
27
- GpuIndexBinaryFlat(GpuResources* resources,
28
+ GpuIndexBinaryFlat(GpuResourcesProvider* resources,
28
29
  const faiss::IndexBinaryFlat* index,
29
30
  GpuIndexBinaryFlatConfig config =
30
31
  GpuIndexBinaryFlatConfig());
31
32
 
32
33
  /// Construct an empty instance that can be added to
33
- GpuIndexBinaryFlat(GpuResources* resources,
34
+ GpuIndexBinaryFlat(GpuResourcesProvider* resources,
34
35
  int dims,
35
36
  GpuIndexBinaryFlatConfig config =
36
37
  GpuIndexBinaryFlatConfig());
@@ -76,14 +77,13 @@ class GpuIndexBinaryFlat : public IndexBinary {
76
77
 
77
78
  protected:
78
79
  /// Manages streans, cuBLAS handles and scratch memory for devices
79
- GpuResources* resources_;
80
+ std::shared_ptr<GpuResources> resources_;
80
81
 
81
82
  /// Configuration options
82
83
  GpuIndexBinaryFlatConfig config_;
83
84
 
84
- /// Holds our GPU data containing the list of vectors; is managed via raw
85
- /// pointer so as to allow non-CUDA compilers to see this header
86
- BinaryFlatIndex* data_;
85
+ /// Holds our GPU data containing the list of vectors
86
+ std::unique_ptr<BinaryFlatIndex> data_;
87
87
  };
88
88
 
89
89
  } } // namespace gpu
@@ -9,6 +9,7 @@
9
9
  #pragma once
10
10
 
11
11
  #include <faiss/gpu/GpuIndex.h>
12
+ #include <memory>
12
13
 
13
14
  namespace faiss {
14
15
 
@@ -47,12 +48,21 @@ class GpuIndexFlat : public GpuIndex {
47
48
  public:
48
49
  /// Construct from a pre-existing faiss::IndexFlat instance, copying
49
50
  /// data over to the given GPU
50
- GpuIndexFlat(GpuResources* resources,
51
+ GpuIndexFlat(GpuResourcesProvider* provider,
52
+ const faiss::IndexFlat* index,
53
+ GpuIndexFlatConfig config = GpuIndexFlatConfig());
54
+
55
+ GpuIndexFlat(std::shared_ptr<GpuResources> resources,
51
56
  const faiss::IndexFlat* index,
52
57
  GpuIndexFlatConfig config = GpuIndexFlatConfig());
53
58
 
54
59
  /// Construct an empty instance that can be added to
55
- GpuIndexFlat(GpuResources* resources,
60
+ GpuIndexFlat(GpuResourcesProvider* provider,
61
+ int dims,
62
+ faiss::MetricType metric,
63
+ GpuIndexFlatConfig config = GpuIndexFlatConfig());
64
+
65
+ GpuIndexFlat(std::shared_ptr<GpuResources> resources,
56
66
  int dims,
57
67
  faiss::MetricType metric,
58
68
  GpuIndexFlatConfig config = GpuIndexFlatConfig());
@@ -100,7 +110,7 @@ class GpuIndexFlat : public GpuIndex {
100
110
  const faiss::Index::idx_t* keys) const override;
101
111
 
102
112
  /// For internal access
103
- inline FlatIndex* getGpuData() { return data_; }
113
+ inline FlatIndex* getGpuData() { return data_.get(); }
104
114
 
105
115
  protected:
106
116
  /// Flat index does not require IDs as there is no storage available for them
@@ -122,9 +132,8 @@ class GpuIndexFlat : public GpuIndex {
122
132
  /// Our config object
123
133
  const GpuIndexFlatConfig config_;
124
134
 
125
- /// Holds our GPU data containing the list of vectors; is managed via raw
126
- /// pointer so as to allow non-CUDA compilers to see this header
127
- FlatIndex* data_;
135
+ /// Holds our GPU data containing the list of vectors
136
+ std::unique_ptr<FlatIndex> data_;
128
137
  };
129
138
 
130
139
  /// Wrapper around the GPU implementation that looks like
@@ -134,12 +143,20 @@ class GpuIndexFlatL2 : public GpuIndexFlat {
134
143
  public:
135
144
  /// Construct from a pre-existing faiss::IndexFlatL2 instance, copying
136
145
  /// data over to the given GPU
137
- GpuIndexFlatL2(GpuResources* resources,
146
+ GpuIndexFlatL2(GpuResourcesProvider* provider,
147
+ faiss::IndexFlatL2* index,
148
+ GpuIndexFlatConfig config = GpuIndexFlatConfig());
149
+
150
+ GpuIndexFlatL2(std::shared_ptr<GpuResources> resources,
138
151
  faiss::IndexFlatL2* index,
139
152
  GpuIndexFlatConfig config = GpuIndexFlatConfig());
140
153
 
141
154
  /// Construct an empty instance that can be added to
142
- GpuIndexFlatL2(GpuResources* resources,
155
+ GpuIndexFlatL2(GpuResourcesProvider* provider,
156
+ int dims,
157
+ GpuIndexFlatConfig config = GpuIndexFlatConfig());
158
+
159
+ GpuIndexFlatL2(std::shared_ptr<GpuResources> resources,
143
160
  int dims,
144
161
  GpuIndexFlatConfig config = GpuIndexFlatConfig());
145
162
 
@@ -159,12 +176,20 @@ class GpuIndexFlatIP : public GpuIndexFlat {
159
176
  public:
160
177
  /// Construct from a pre-existing faiss::IndexFlatIP instance, copying
161
178
  /// data over to the given GPU
162
- GpuIndexFlatIP(GpuResources* resources,
179
+ GpuIndexFlatIP(GpuResourcesProvider* provider,
180
+ faiss::IndexFlatIP* index,
181
+ GpuIndexFlatConfig config = GpuIndexFlatConfig());
182
+
183
+ GpuIndexFlatIP(std::shared_ptr<GpuResources> resources,
163
184
  faiss::IndexFlatIP* index,
164
185
  GpuIndexFlatConfig config = GpuIndexFlatConfig());
165
186
 
166
187
  /// Construct an empty instance that can be added to
167
- GpuIndexFlatIP(GpuResources* resources,
188
+ GpuIndexFlatIP(GpuResourcesProvider* provider,
189
+ int dims,
190
+ GpuIndexFlatConfig config = GpuIndexFlatConfig());
191
+
192
+ GpuIndexFlatIP(std::shared_ptr<GpuResources> resources,
168
193
  int dims,
169
194
  GpuIndexFlatConfig config = GpuIndexFlatConfig());
170
195
 
@@ -18,7 +18,6 @@ namespace faiss { struct IndexIVF; }
18
18
  namespace faiss { namespace gpu {
19
19
 
20
20
  class GpuIndexFlat;
21
- class GpuResources;
22
21
 
23
22
  struct GpuIndexIVFConfig : public GpuIndexConfig {
24
23
  inline GpuIndexIVFConfig()
@@ -34,7 +33,7 @@ struct GpuIndexIVFConfig : public GpuIndexConfig {
34
33
 
35
34
  class GpuIndexIVF : public GpuIndex {
36
35
  public:
37
- GpuIndexIVF(GpuResources* resources,
36
+ GpuIndexIVF(GpuResourcesProvider* provider,
38
37
  int dims,
39
38
  faiss::MetricType metric,
40
39
  float metricArg,
@@ -9,6 +9,7 @@
9
9
  #pragma once
10
10
 
11
11
  #include <faiss/gpu/GpuIndexIVF.h>
12
+ #include <memory>
12
13
 
13
14
  namespace faiss { struct IndexIVFFlat; }
14
15
 
@@ -26,13 +27,13 @@ class GpuIndexIVFFlat : public GpuIndexIVF {
26
27
  public:
27
28
  /// Construct from a pre-existing faiss::IndexIVFFlat instance, copying
28
29
  /// data over to the given GPU, if the input index is trained.
29
- GpuIndexIVFFlat(GpuResources* resources,
30
+ GpuIndexIVFFlat(GpuResourcesProvider* provider,
30
31
  const faiss::IndexIVFFlat* index,
31
32
  GpuIndexIVFFlatConfig config = GpuIndexIVFFlatConfig());
32
33
 
33
34
  /// Constructs a new instance with an empty flat quantizer; the user
34
35
  /// provides the number of lists desired.
35
- GpuIndexIVFFlat(GpuResources* resources,
36
+ GpuIndexIVFFlat(GpuResourcesProvider* provider,
36
37
  int dims,
37
38
  int nlist,
38
39
  faiss::MetricType metric,
@@ -79,7 +80,7 @@ class GpuIndexIVFFlat : public GpuIndexIVF {
79
80
  size_t reserveMemoryVecs_;
80
81
 
81
82
  /// Instance that we own; contains the inverted list
82
- IVFFlat* index_;
83
+ std::unique_ptr<IVFFlat> index_;
83
84
  };
84
85
 
85
86
  } } // namespace