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
@@ -5,9 +5,8 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
-
9
- #include <faiss/utils/WorkerThread.h>
10
8
  #include <faiss/impl/FaissAssert.h>
9
+ #include <faiss/utils/WorkerThread.h>
11
10
  #include <exception>
12
11
 
13
12
  namespace faiss {
@@ -15,112 +14,104 @@ namespace faiss {
15
14
  namespace {
16
15
 
17
16
  // Captures any exceptions thrown by the lambda and returns them via the promise
18
- void runCallback(std::function<void()>& fn,
19
- std::promise<bool>& promise) {
20
- try {
21
- fn();
22
- promise.set_value(true);
23
- } catch (...) {
24
- promise.set_exception(std::current_exception());
25
- }
17
+ void runCallback(std::function<void()>& fn, std::promise<bool>& promise) {
18
+ try {
19
+ fn();
20
+ promise.set_value(true);
21
+ } catch (...) {
22
+ promise.set_exception(std::current_exception());
23
+ }
26
24
  }
27
25
 
28
26
  } // namespace
29
27
 
30
- WorkerThread::WorkerThread() :
31
- wantStop_(false) {
32
- startThread();
28
+ WorkerThread::WorkerThread() : wantStop_(false) {
29
+ startThread();
33
30
 
34
- // Make sure that the thread has started before continuing
35
- add([](){}).get();
31
+ // Make sure that the thread has started before continuing
32
+ add([]() {}).get();
36
33
  }
37
34
 
38
35
  WorkerThread::~WorkerThread() {
39
- stop();
40
- waitForThreadExit();
36
+ stop();
37
+ waitForThreadExit();
41
38
  }
42
39
 
43
- void
44
- WorkerThread::startThread() {
45
- thread_ = std::thread([this](){ threadMain(); });
40
+ void WorkerThread::startThread() {
41
+ thread_ = std::thread([this]() { threadMain(); });
46
42
  }
47
43
 
48
- void
49
- WorkerThread::stop() {
50
- std::lock_guard<std::mutex> guard(mutex_);
44
+ void WorkerThread::stop() {
45
+ std::lock_guard<std::mutex> guard(mutex_);
51
46
 
52
- wantStop_ = true;
53
- monitor_.notify_one();
47
+ wantStop_ = true;
48
+ monitor_.notify_one();
54
49
  }
55
50
 
56
- std::future<bool>
57
- WorkerThread::add(std::function<void()> f) {
58
- std::lock_guard<std::mutex> guard(mutex_);
51
+ std::future<bool> WorkerThread::add(std::function<void()> f) {
52
+ std::lock_guard<std::mutex> guard(mutex_);
59
53
 
60
- if (wantStop_) {
61
- // The timer thread has been stopped, or we want to stop; we can't
62
- // schedule anything else
63
- std::promise<bool> p;
64
- auto fut = p.get_future();
54
+ if (wantStop_) {
55
+ // The timer thread has been stopped, or we want to stop; we can't
56
+ // schedule anything else
57
+ std::promise<bool> p;
58
+ auto fut = p.get_future();
65
59
 
66
- // did not execute
67
- p.set_value(false);
68
- return fut;
69
- }
60
+ // did not execute
61
+ p.set_value(false);
62
+ return fut;
63
+ }
70
64
 
71
- auto pr = std::promise<bool>();
72
- auto fut = pr.get_future();
65
+ auto pr = std::promise<bool>();
66
+ auto fut = pr.get_future();
73
67
 
74
- queue_.emplace_back(std::make_pair(std::move(f), std::move(pr)));
68
+ queue_.emplace_back(std::make_pair(std::move(f), std::move(pr)));
75
69
 
76
- // Wake up our thread
77
- monitor_.notify_one();
78
- return fut;
70
+ // Wake up our thread
71
+ monitor_.notify_one();
72
+ return fut;
79
73
  }
80
74
 
81
- void
82
- WorkerThread::threadMain() {
83
- threadLoop();
75
+ void WorkerThread::threadMain() {
76
+ threadLoop();
84
77
 
85
- // Call all pending tasks
86
- FAISS_ASSERT(wantStop_);
78
+ // Call all pending tasks
79
+ FAISS_ASSERT(wantStop_);
87
80
 
88
- // flush all pending operations
89
- for (auto& f : queue_) {
90
- runCallback(f.first, f.second);
91
- }
81
+ // flush all pending operations
82
+ for (auto& f : queue_) {
83
+ runCallback(f.first, f.second);
84
+ }
92
85
  }
93
86
 
94
- void
95
- WorkerThread::threadLoop() {
96
- while (true) {
97
- std::pair<std::function<void()>, std::promise<bool>> data;
87
+ void WorkerThread::threadLoop() {
88
+ while (true) {
89
+ std::pair<std::function<void()>, std::promise<bool>> data;
98
90
 
99
- {
100
- std::unique_lock<std::mutex> lock(mutex_);
91
+ {
92
+ std::unique_lock<std::mutex> lock(mutex_);
101
93
 
102
- while (!wantStop_ && queue_.empty()) {
103
- monitor_.wait(lock);
104
- }
94
+ while (!wantStop_ && queue_.empty()) {
95
+ monitor_.wait(lock);
96
+ }
105
97
 
106
- if (wantStop_) {
107
- return;
108
- }
98
+ if (wantStop_) {
99
+ return;
100
+ }
109
101
 
110
- data = std::move(queue_.front());
111
- queue_.pop_front();
112
- }
102
+ data = std::move(queue_.front());
103
+ queue_.pop_front();
104
+ }
113
105
 
114
- runCallback(data.first, data.second);
115
- }
106
+ runCallback(data.first, data.second);
107
+ }
116
108
  }
117
109
 
118
- void
119
- WorkerThread::waitForThreadExit() {
120
- try {
121
- thread_.join();
122
- } catch (...) {
123
- }
110
+ void WorkerThread::waitForThreadExit() {
111
+ try {
112
+ thread_.join();
113
+ } catch (...) {
114
+ }
124
115
  }
125
116
 
126
- } // namespace
117
+ } // namespace faiss
@@ -5,57 +5,56 @@
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 <condition_variable>
12
- #include <future>
13
11
  #include <deque>
12
+ #include <future>
14
13
  #include <thread>
15
14
 
16
15
  namespace faiss {
17
16
 
18
17
  class WorkerThread {
19
- public:
20
- WorkerThread();
18
+ public:
19
+ WorkerThread();
21
20
 
22
- /// Stops and waits for the worker thread to exit, flushing all
23
- /// pending lambdas
24
- ~WorkerThread();
21
+ /// Stops and waits for the worker thread to exit, flushing all
22
+ /// pending lambdas
23
+ ~WorkerThread();
25
24
 
26
- /// Request that the worker thread stop itself
27
- void stop();
25
+ /// Request that the worker thread stop itself
26
+ void stop();
28
27
 
29
- /// Blocking waits in the current thread for the worker thread to
30
- /// stop
31
- void waitForThreadExit();
28
+ /// Blocking waits in the current thread for the worker thread to
29
+ /// stop
30
+ void waitForThreadExit();
32
31
 
33
- /// Adds a lambda to run on the worker thread; returns a future that
34
- /// can be used to block on its completion.
35
- /// Future status is `true` if the lambda was run in the worker
36
- /// thread; `false` if it was not run, because the worker thread is
37
- /// exiting or has exited.
38
- std::future<bool> add(std::function<void()> f);
32
+ /// Adds a lambda to run on the worker thread; returns a future that
33
+ /// can be used to block on its completion.
34
+ /// Future status is `true` if the lambda was run in the worker
35
+ /// thread; `false` if it was not run, because the worker thread is
36
+ /// exiting or has exited.
37
+ std::future<bool> add(std::function<void()> f);
39
38
 
40
- private:
41
- void startThread();
42
- void threadMain();
43
- void threadLoop();
39
+ private:
40
+ void startThread();
41
+ void threadMain();
42
+ void threadLoop();
44
43
 
45
- /// Thread that all queued lambdas are run on
46
- std::thread thread_;
44
+ /// Thread that all queued lambdas are run on
45
+ std::thread thread_;
47
46
 
48
- /// Mutex for the queue and exit status
49
- std::mutex mutex_;
47
+ /// Mutex for the queue and exit status
48
+ std::mutex mutex_;
50
49
 
51
- /// Monitor for the exit status and the queue
52
- std::condition_variable monitor_;
50
+ /// Monitor for the exit status and the queue
51
+ std::condition_variable monitor_;
53
52
 
54
- /// Whether or not we want the thread to exit
55
- bool wantStop_;
53
+ /// Whether or not we want the thread to exit
54
+ bool wantStop_;
56
55
 
57
- /// Queue of pending lambdas to call
58
- std::deque<std::pair<std::function<void()>, std::promise<bool>>> queue_;
56
+ /// Queue of pending lambdas to call
57
+ std::deque<std::pair<std::function<void()>, std::promise<bool>>> queue_;
59
58
  };
60
59
 
61
- } // namespace
60
+ } // namespace faiss