faiss 0.1.2 → 0.1.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 (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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 61a0b7a7d20933b60a9e0e213016b77f10eae5bb86ecf6825f5f5661f31f5d7d
4
- data.tar.gz: 967378ee774a35e3a639b1d902648ebf4177ffb7ed43e7228e8432f284f397c1
3
+ metadata.gz: 97fd4d583754d20a5771e941fd5272205977c34b77eb9252e58f6016b90be52e
4
+ data.tar.gz: 26df73fc7891efd894e9ebf4ed37db2aaa3af8b62221cdd707cb287f920ad0a7
5
5
  SHA512:
6
- metadata.gz: 32747a4d4a3d40f15e9802280d894b2270d4b78ac0a10859442d0fd3c7ae27a55032a92e072756cb4046964c9d53afcc9586ac954e2b3cf63d057d0a3652e5a8
7
- data.tar.gz: ca5005286253b7dea1546160ffb00c4b91a8b926512fbcfb7db594171435249e88408c982dc53fed4d90f87e68979bd9c2a2c1975f94495ca77c9ac878b22c1c
6
+ metadata.gz: 197143a79061c299b8f5e5ae76466db1a673e46f6d842615bed46170afadb6145e14df936262ec45f7e0d1eea889037cb3123c5a9348e32774eeb97414f180fd
7
+ data.tar.gz: 5a8e1ecebd43886d974e52fa216d86d9c03e3f8c04629eddc04a8be8df5c7ab4fc4c57398f2893d44718c788cd1853ae1bee06f64f1d49cdc5330cb03c5c0e6c
@@ -1,3 +1,7 @@
1
+ ## 0.1.3 (2020-10-22)
2
+
3
+ - Updated Faiss to 1.6.4
4
+
1
5
  ## 0.1.2 (2020-08-17)
2
6
 
3
7
  - Updated Faiss to 1.6.3
@@ -7,7 +7,7 @@ abort "OpenMP not found" unless have_library("omp") || have_library("gomp")
7
7
  $CXXFLAGS << " -std=c++11 -march=native -DFINTEGER=int"
8
8
 
9
9
  ext = File.expand_path(".", __dir__)
10
- vendor = File.expand_path("../../vendor", __dir__)
10
+ vendor = File.expand_path("../../vendor/faiss", __dir__)
11
11
 
12
12
  $srcs = Dir["{#{ext},#{vendor}/faiss,#{vendor}/faiss/impl,#{vendor}/faiss/utils}/*.{cpp}"]
13
13
  $objs = $srcs.map { |v| v.sub(/cpp\z/, "o") }
@@ -1,3 +1,3 @@
1
1
  module Faiss
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+
9
+ #include <cstdio>
10
+ #include <omp.h>
11
+
12
+ #include <faiss/impl/ScalarQuantizer.h>
13
+ #include <faiss/utils/utils.h>
14
+ #include <faiss/utils/random.h>
15
+ #include <faiss/utils/distances.h>
16
+
17
+ using namespace faiss;
18
+
19
+ int main() {
20
+
21
+ int d = 128;
22
+ int n = 2000;
23
+
24
+ std::vector<float> x(d * n);
25
+
26
+ float_rand(x.data(), d * n, 12345);
27
+
28
+ // make sure it's idempotent
29
+ ScalarQuantizer sq(d, ScalarQuantizer::QT_6bit);
30
+
31
+ omp_set_num_threads(1);
32
+
33
+ sq.train(n, x.data());
34
+
35
+ size_t code_size = sq.code_size;
36
+ printf("code size: %ld\n", sq.code_size);
37
+
38
+ // encode
39
+ std::vector<uint8_t> codes(code_size * n);
40
+ sq.compute_codes(x.data(), codes.data(), n);
41
+
42
+ // decode
43
+ std::vector<float> x2(d * n);
44
+ sq.decode(codes.data(), x2.data(), n);
45
+
46
+ printf("sqL2 recons error: %g\n",
47
+ fvec_L2sqr(x.data(), x2.data(), n * d) / n);
48
+
49
+ // encode again
50
+ std::vector<uint8_t> codes2(code_size * n);
51
+ sq.compute_codes(x2.data(), codes2.data(), n);
52
+
53
+ size_t ndiff = 0;
54
+ for (size_t i = 0; i < codes.size(); i++) {
55
+ if (codes[i] != codes2[i]) ndiff++;
56
+ }
57
+
58
+ printf("ndiff for idempotence: %ld / %ld\n", ndiff, codes.size());
59
+
60
+ std::unique_ptr<ScalarQuantizer::SQDistanceComputer>
61
+ dc(sq.get_distance_computer());
62
+ dc->codes = codes.data();
63
+ dc->code_size = sq.code_size;
64
+ printf("code size: %ld\n", dc->code_size);
65
+
66
+ double sum_dis = 0;
67
+ double t0 = getmillisecs();
68
+ for (int i = 0; i < n; i++) {
69
+ dc->set_query(&x[i * d]);
70
+ for (int j = 0; j < n; j++) {
71
+ sum_dis += (*dc)(j);
72
+ }
73
+ }
74
+ printf("distances computed in %.3f ms, checksum=%g\n",
75
+ getmillisecs() - t0, sum_dis);
76
+
77
+
78
+
79
+ return 0;
80
+ }
@@ -31,6 +31,8 @@ void faiss_ParameterRange_values(FaissParameterRange*, double**, size_t*);
31
31
  */
32
32
  FAISS_DECLARE_CLASS(ParameterSpace)
33
33
 
34
+ FAISS_DECLARE_DESTRUCTOR(ParameterSpace)
35
+
34
36
  /// Parameter space default constructor
35
37
  int faiss_ParameterSpace_new(FaissParameterSpace** space);
36
38
 
@@ -32,12 +32,6 @@ int faiss_IndexShards_add_shard(FaissIndexShards* index, FaissIndex* shard) {
32
32
  } CATCH_AND_HANDLE
33
33
  }
34
34
 
35
- int faiss_IndexShards_sync_with_shard_indexes(FaissIndexShards* index) {
36
- try {
37
- reinterpret_cast<IndexShards*>(index)->sync_with_shard_indexes();
38
- } CATCH_AND_HANDLE
39
- }
40
-
41
35
  FaissIndex* faiss_IndexShards_at(FaissIndexShards* index, int i) {
42
36
  auto shard = reinterpret_cast<IndexShards*>(index)->at(i);
43
37
  return reinterpret_cast<FaissIndex*>(shard);
@@ -31,12 +31,9 @@ int faiss_IndexShards_new_with_options(FaissIndexShards** p_index, idx_t d, int
31
31
 
32
32
  int faiss_IndexShards_add_shard(FaissIndexShards* index, FaissIndex* shard);
33
33
 
34
- /// update metric_type and ntotal
35
- int faiss_IndexShards_sync_with_shard_indexes(FaissIndexShards* index);
36
-
37
34
  FaissIndex* faiss_IndexShards_at(FaissIndexShards* index, int i);
38
35
 
39
36
  #ifdef __cplusplus
40
37
  }
41
38
  #endif
42
- #endif
39
+ #endif
@@ -12,8 +12,10 @@
12
12
  #include "GpuClonerOptions_c.h"
13
13
  #include "macros_impl.h"
14
14
  #include "Index.h"
15
- #include "gpu/GpuAutoTune.h"
16
- #include "gpu/GpuClonerOptions.h"
15
+ #include <faiss/gpu/GpuCloner.h>
16
+ #include <faiss/gpu/GpuResources.h>
17
+ #include <faiss/gpu/GpuAutoTune.h>
18
+ #include <faiss/gpu/GpuClonerOptions.h>
17
19
  #include <vector>
18
20
 
19
21
  using faiss::Index;
@@ -9,7 +9,7 @@
9
9
  // -*- c++ -*-
10
10
 
11
11
  #include "GpuClonerOptions_c.h"
12
- #include "gpu/GpuClonerOptions.h"
12
+ #include <faiss/gpu/GpuClonerOptions.h>
13
13
  #include "macros_impl.h"
14
14
 
15
15
  using faiss::gpu::IndicesOptions;
@@ -8,7 +8,7 @@
8
8
  // Copyright 2004-present Facebook. All Rights Reserved.
9
9
  // -*- c++ -*-
10
10
 
11
- #include "gpu/GpuIndex.h"
11
+ #include <faiss/gpu/GpuIndex.h>
12
12
  #include "GpuIndex_c.h"
13
13
  #include "macros_impl.h"
14
14
 
@@ -9,7 +9,7 @@
9
9
  // -*- c++ -*-
10
10
 
11
11
  #include "gpu/GpuResources_c.h"
12
- #include "gpu/GpuResources.h"
12
+ #include <faiss/gpu/GpuResources.h>
13
13
  #include "macros_impl.h"
14
14
 
15
15
  using faiss::gpu::GpuResources;
@@ -9,7 +9,7 @@
9
9
  // -*- c++ -*-
10
10
 
11
11
  #include "gpu/StandardGpuResources_c.h"
12
- #include "gpu/StandardGpuResources.h"
12
+ #include <faiss/gpu/StandardGpuResources.h>
13
13
  #include "macros_impl.h"
14
14
 
15
15
  using faiss::gpu::StandardGpuResources;
@@ -10,6 +10,7 @@
10
10
  #include <cmath>
11
11
  #include <cstdio>
12
12
  #include <cstdlib>
13
+ #include <random>
13
14
 
14
15
  #include <sys/time.h>
15
16
 
@@ -77,6 +78,8 @@ int main ()
77
78
  // Use 4-1024 depending on the trade-off speed accuracy that you want
78
79
  index.nprobe = 2048;
79
80
 
81
+ std::mt19937 rng;
82
+ std::uniform_real_distribution<> distrib;
80
83
 
81
84
  { // training
82
85
  printf ("[%.3f s] Generating %ld vectors in %dD for training\n",
@@ -84,7 +87,7 @@ int main ()
84
87
 
85
88
  std::vector <float> trainvecs (nt * d);
86
89
  for (size_t i = 0; i < nt * d; i++) {
87
- trainvecs[i] = drand48();
90
+ trainvecs[i] = distrib(rng);
88
91
  }
89
92
 
90
93
  printf ("[%.3f s] Training the index\n", elapsed() - t0);
@@ -101,7 +104,7 @@ int main ()
101
104
 
102
105
  std::vector <float> database (nb * d);
103
106
  for (size_t i = 0; i < nb * d; i++) {
104
- database[i] = drand48();
107
+ database[i] = distrib(rng);
105
108
  }
106
109
 
107
110
  printf ("[%.3f s] Adding the vectors to the index\n", elapsed() - t0);
@@ -10,6 +10,7 @@
10
10
  #include <cmath>
11
11
  #include <cstdio>
12
12
  #include <cstdlib>
13
+ #include <random>
13
14
 
14
15
  #include <sys/time.h>
15
16
 
@@ -87,6 +88,9 @@ int main ()
87
88
  index.nprobe = 2048;
88
89
 
89
90
 
91
+ std::mt19937 rng;
92
+ std::uniform_real_distribution<> distrib;
93
+
90
94
  { // training.
91
95
 
92
96
  // The distribution of the training vectors should be the same
@@ -100,7 +104,7 @@ int main ()
100
104
  std::vector <float> trainvecs (nt * d);
101
105
  for (size_t i = 0; i < nt; i++) {
102
106
  for (size_t j = 0; j < d; j++) {
103
- trainvecs[i * d + j] = drand48();
107
+ trainvecs[i * d + j] = distrib(rng);
104
108
  }
105
109
  }
106
110
 
@@ -124,7 +128,7 @@ int main ()
124
128
  std::vector <long> ids (nb);
125
129
  for (size_t i = 0; i < nb; i++) {
126
130
  for (size_t j = 0; j < d; j++) {
127
- database[i * d + j] = drand48();
131
+ database[i * d + j] = distrib(rng);
128
132
  }
129
133
  ids[i] = 8760000000L + i;
130
134
  }
@@ -10,6 +10,7 @@
10
10
  #include <cmath>
11
11
  #include <cstdio>
12
12
  #include <cstdlib>
13
+ #include <random>
13
14
 
14
15
  #include <sys/time.h>
15
16
 
@@ -54,13 +55,16 @@ int main ()
54
55
  ncentroids, 4, 8);
55
56
 
56
57
 
58
+ std::mt19937 rng;
59
+
57
60
  { // training
58
61
  printf ("[%.3f s] Generating %ld vectors in %dD for training\n",
59
62
  elapsed() - t0, nt, d);
60
63
 
61
64
  std::vector <float> trainvecs (nt * d);
65
+ std::uniform_real_distribution<> distrib;
62
66
  for (size_t i = 0; i < nt * d; i++) {
63
- trainvecs[i] = drand48();
67
+ trainvecs[i] = distrib(rng);
64
68
  }
65
69
 
66
70
  printf ("[%.3f s] Training the index\n",
@@ -86,8 +90,9 @@ int main ()
86
90
  elapsed() - t0, nb);
87
91
 
88
92
  std::vector <float> database (nb * d);
93
+ std::uniform_real_distribution<> distrib;
89
94
  for (size_t i = 0; i < nb * d; i++) {
90
- database[i] = drand48();
95
+ database[i] = distrib(rng);
91
96
  }
92
97
 
93
98
  printf ("[%.3f s] Adding the vectors to the index\n",
@@ -13,6 +13,7 @@
13
13
 
14
14
  #include <faiss/AutoTune.h>
15
15
 
16
+ #include <cinttypes>
16
17
  #include <cmath>
17
18
 
18
19
  #include <faiss/impl/FaissAssert.h>
@@ -233,7 +234,7 @@ void OperatingPoints::display (bool only_optimal) const
233
234
  {
234
235
  const std::vector<OperatingPoint> &pts =
235
236
  only_optimal ? optimal_pts : all_pts;
236
- printf("Tested %ld operating points, %ld ones are optimal:\n",
237
+ printf("Tested %zd operating points, %zd ones are optimal:\n",
237
238
  all_pts.size(), optimal_pts.size());
238
239
 
239
240
  for (int i = 0; i < pts.size(); i++) {
@@ -247,7 +248,7 @@ void OperatingPoints::display (bool only_optimal) const
247
248
  }
248
249
  }
249
250
  }
250
- printf ("cno=%ld key=%s perf=%.4f t=%.3f %s\n",
251
+ printf ("cno=%" PRId64 " key=%s perf=%.4f t=%.3f %s\n",
251
252
  op.cno, op.key.c_str(), op.perf, op.t, star);
252
253
  }
253
254
 
@@ -437,11 +438,10 @@ void ParameterSpace::set_index_parameters (Index *index, size_t cno) const
437
438
  void ParameterSpace::set_index_parameters (
438
439
  Index *index, const char *description_in) const
439
440
  {
440
- char description[strlen(description_in) + 1];
441
+ std::string description(description_in);
441
442
  char *ptr;
442
- memcpy (description, description_in, strlen(description_in) + 1);
443
443
 
444
- for (char *tok = strtok_r (description, " ,", &ptr);
444
+ for (char *tok = strtok_r (&description[0], " ,", &ptr);
445
445
  tok;
446
446
  tok = strtok_r (nullptr, " ,", &ptr)) {
447
447
  char name[100];
@@ -566,7 +566,7 @@ void ParameterSpace::set_index_parameter (
566
566
 
567
567
  void ParameterSpace::display () const
568
568
  {
569
- printf ("ParameterSpace, %ld parameters, %ld combinations:\n",
569
+ printf ("ParameterSpace, %zd parameters, %zd combinations:\n",
570
570
  parameter_ranges.size (), n_combinations ());
571
571
  for (int i = 0; i < parameter_ranges.size(); i++) {
572
572
  const ParameterRange & pr = parameter_ranges[i];
@@ -622,7 +622,7 @@ void ParameterSpace::explore (Index *index,
622
622
  bool keep = ops->add (perf, t_search, combination_name (cno), cno);
623
623
 
624
624
  if (verbose)
625
- printf(" %ld/%ld: %s perf=%.3f t=%.3f s %s\n", cno, n_comb,
625
+ printf(" %zd/%zd: %s perf=%.3f t=%.3f s %s\n", cno, n_comb,
626
626
  combination_name (cno).c_str(), perf, t_search,
627
627
  keep ? "*" : "");
628
628
  }
@@ -646,7 +646,7 @@ void ParameterSpace::explore (Index *index,
646
646
  size_t cno = perm[xp];
647
647
 
648
648
  if (verbose)
649
- printf(" %ld/%d: cno=%ld %s ", xp, n_exp, cno,
649
+ printf(" %zd/%d: cno=%zd %s ", xp, n_exp, cno,
650
650
  combination_name (cno).c_str());
651
651
 
652
652
  {
@@ -677,7 +677,7 @@ void ParameterSpace::explore (Index *index,
677
677
 
678
678
  if (thread_over_batches) {
679
679
  #pragma omp parallel for
680
- for (size_t q0 = 0; q0 < nq; q0 += batchsize) {
680
+ for (Index::idx_t q0 = 0; q0 < nq; q0 += batchsize) {
681
681
  size_t q1 = q0 + batchsize;
682
682
  if (q1 > nq) q1 = nq;
683
683
  index->search (q1 - q0, xq + q0 * index->d,
@@ -10,6 +10,7 @@
10
10
  #include <faiss/Clustering.h>
11
11
  #include <faiss/impl/AuxIndexStructures.h>
12
12
 
13
+ #include <cinttypes>
13
14
  #include <cmath>
14
15
  #include <cstdio>
15
16
  #include <cstring>
@@ -97,7 +98,7 @@ idx_t subsample_training_set(
97
98
  )
98
99
  {
99
100
  if (clus.verbose) {
100
- printf("Sampling a subset of %ld / %ld for training\n",
101
+ printf("Sampling a subset of %zd / %" PRId64 " for training\n",
101
102
  clus.k * clus.max_points_per_centroid, nx);
102
103
  }
103
104
  std::vector<int> perm (nx);
@@ -190,7 +191,7 @@ void compute_centroids (size_t d, size_t k, size_t n,
190
191
  }
191
192
 
192
193
  #pragma omp parallel for
193
- for (size_t ci = 0; ci < k; ci++) {
194
+ for (idx_t ci = 0; ci < k; ci++) {
194
195
  if (hassign[ci] == 0) {
195
196
  continue;
196
197
  }
@@ -209,7 +210,7 @@ void compute_centroids (size_t d, size_t k, size_t n,
209
210
  /** Handle empty clusters by splitting larger ones.
210
211
  *
211
212
  * It works by slightly changing the centroids to make 2 clusters from
212
- * a single one. Takes the same arguements as compute_centroids.
213
+ * a single one. Takes the same arguments as compute_centroids.
213
214
  *
214
215
  * @return nb of spliting operations (larger is worse)
215
216
  */
@@ -269,8 +270,8 @@ void Clustering::train_encoded (idx_t nx, const uint8_t *x_in,
269
270
  const float *weights) {
270
271
 
271
272
  FAISS_THROW_IF_NOT_FMT (nx >= k,
272
- "Number of training points (%ld) should be at least "
273
- "as large as number of clusters (%ld)", nx, k);
273
+ "Number of training points (%" PRId64 ") should be at least "
274
+ "as large as number of clusters (%zd)", nx, k);
274
275
 
275
276
  FAISS_THROW_IF_NOT_FMT ((!codec || codec->d == d),
276
277
  "Codec dimension %d not the same as data dimension %d",
@@ -288,7 +289,7 @@ void Clustering::train_encoded (idx_t nx, const uint8_t *x_in,
288
289
  // reports.
289
290
  const float *x = reinterpret_cast<const float *>(x_in);
290
291
  for (size_t i = 0; i < nx * d; i++) {
291
- FAISS_THROW_IF_NOT_MSG (finite (x[i]),
292
+ FAISS_THROW_IF_NOT_MSG (std::isfinite (x[i]),
292
293
  "input contains NaN's or Inf's");
293
294
  }
294
295
  }
@@ -307,15 +308,15 @@ void Clustering::train_encoded (idx_t nx, const uint8_t *x_in,
307
308
  del3.reset (weights_new); weights = weights_new;
308
309
  } else if (nx < k * min_points_per_centroid) {
309
310
  fprintf (stderr,
310
- "WARNING clustering %ld points to %ld centroids: "
311
- "please provide at least %ld training points\n",
311
+ "WARNING clustering %" PRId64 " points to %zd centroids: "
312
+ "please provide at least %" PRId64 " training points\n",
312
313
  nx, k, idx_t(k) * min_points_per_centroid);
313
314
  }
314
315
 
315
316
  if (nx == k) {
316
317
  // this is a corner case, just copy training set to clusters
317
318
  if (verbose) {
318
- printf("Number of training points (%ld) same as number of "
319
+ printf("Number of training points (%" PRId64 ") same as number of "
319
320
  "clusters, just copying\n", nx);
320
321
  }
321
322
  centroids.resize (d * k);
@@ -336,11 +337,11 @@ void Clustering::train_encoded (idx_t nx, const uint8_t *x_in,
336
337
 
337
338
 
338
339
  if (verbose) {
339
- printf("Clustering %d points in %ldD to %ld clusters, "
340
+ printf("Clustering %" PRId64 " points in %zdD to %zd clusters, "
340
341
  "redo %d times, %d iterations\n",
341
- int(nx), d, k, nredo, niter);
342
+ nx, d, k, nredo, niter);
342
343
  if (codec) {
343
- printf("Input data encoded in %ld bytes per vector\n",
344
+ printf("Input data encoded in %zd bytes per vector\n",
344
345
  codec->sa_code_size ());
345
346
  }
346
347
  }