Commit f0dc2607d9d798c69382fefd5d8ca4f0251dbebc

Authored by Josh Klontz
1 parent 952f60e6

more future refactoring

sdk/core/qtutils.h
... ... @@ -63,14 +63,6 @@ namespace QtUtils
63 63 bool runRScript(const QString &file);
64 64 bool runDot(const QString &file);
65 65 void showFile(const QString &file);
66   -
67   - /**** Thread Utilities ****/
68   - template <typename T>
69   - static inline void waitForFinished(const QList< QFuture<T> > &futures)
70   - {
71   - foreach (QFuture<T> future, futures)
72   - future.waitForFinished();
73   - }
74 66 }
75 67  
76 68 #endif // __QTUTILS_H
... ...
sdk/openbr_plugin.cpp
... ... @@ -14,6 +14,7 @@
14 14 * limitations under the License. *
15 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16  
  17 +#include <QFutureSynchronizer>
17 18 #include <QMetaProperty>
18 19 #include <QPointF>
19 20 #include <QRect>
... ... @@ -1162,12 +1163,12 @@ private:
1162 1163 for (int i=0; i<templatesList.size(); i++)
1163 1164 templatesList[i] = Downsample(templatesList[i], transforms[i]);
1164 1165  
1165   - QList< QFuture<void> > futures;
  1166 + QFutureSynchronizer<void> futures;
1166 1167 for (int i=0; i<templatesList.size(); i++) {
1167   - if (Globals->parallelism) futures.append(QtConcurrent::run(_train, transforms[i], &templatesList[i]));
1168   - else _train (transforms[i], &templatesList[i]);
  1168 + if (Globals->parallelism) futures.addFuture(QtConcurrent::run(_train, transforms[i], &templatesList[i]));
  1169 + else _train (transforms[i], &templatesList[i]);
1169 1170 }
1170   - QtUtils::waitForFinished(futures);
  1171 + futures.waitForFinished();
1171 1172 }
1172 1173  
1173 1174 void project(const Template &src, Template &dst) const
... ... @@ -1306,11 +1307,11 @@ void Transform::backProject(const TemplateList &amp;dst, TemplateList &amp;src) const
1306 1307 src.reserve(dst.size());
1307 1308 for (int i=0; i<dst.size(); i++) src.append(Template());
1308 1309  
1309   - QList< QFuture<void> > futures;
  1310 + QFutureSynchronizer<void> futures;
1310 1311 for (int i=0; i<dst.size(); i++)
1311   - if (Globals->parallelism) futures.append(QtConcurrent::run(_backProject, this, &dst[i], &src[i]));
1312   - else _backProject (this, &dst[i], &src[i]);
1313   - QtUtils::waitForFinished(futures);
  1312 + if (Globals->parallelism) futures.addFuture(QtConcurrent::run(_backProject, this, &dst[i], &src[i]));
  1313 + else _backProject (this, &dst[i], &src[i]);
  1314 + futures.waitForFinished();
1314 1315 }
1315 1316  
1316 1317 /* Distance - public methods */
... ... @@ -1338,16 +1339,16 @@ void Distance::compare(const TemplateList &amp;target, const TemplateList &amp;query, Ou
1338 1339 const bool stepTarget = target.size() > query.size();
1339 1340 const int totalSize = std::max(target.size(), query.size());
1340 1341 int stepSize = ceil(float(totalSize) / float(std::max(1, abs(Globals->parallelism))));
1341   - QList< QFuture<void> > futures; futures.reserve(ceil(float(totalSize)/float(stepSize)));
  1342 + QFutureSynchronizer<void> futures;
1342 1343 for (int i=0; i<totalSize; i+=stepSize) {
1343 1344 const TemplateList &targets(stepTarget ? TemplateList(target.mid(i, stepSize)) : target);
1344 1345 const TemplateList &queries(stepTarget ? query : TemplateList(query.mid(i, stepSize)));
1345 1346 const int targetOffset = stepTarget ? i : 0;
1346 1347 const int queryOffset = stepTarget ? 0 : i;
1347   - if (Globals->parallelism) futures.append(QtConcurrent::run(this, &Distance::compareBlock, targets, queries, output, targetOffset, queryOffset));
1348   - else compareBlock (targets, queries, output, targetOffset, queryOffset);
  1348 + if (Globals->parallelism) futures.addFuture(QtConcurrent::run(this, &Distance::compareBlock, targets, queries, output, targetOffset, queryOffset));
  1349 + else compareBlock (targets, queries, output, targetOffset, queryOffset);
1349 1350 }
1350   - QtUtils::waitForFinished(futures);
  1351 + futures.waitForFinished();
1351 1352 }
1352 1353  
1353 1354 QList<float> Distance::compare(const TemplateList &targets, const Template &query) const
... ...
sdk/plugins/distance.cpp
... ... @@ -14,6 +14,7 @@
14 14 * limitations under the License. *
15 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16  
  17 +#include <QFutureSynchronizer>
17 18 #include <QtConcurrentRun>
18 19 #include <opencv2/imgproc/imgproc.hpp>
19 20 #include <openbr_plugin.h>
... ... @@ -155,11 +156,11 @@ class PipeDistance : public Distance
155 156  
156 157 void train(const TemplateList &data)
157 158 {
158   - QList< QFuture<void> > futures;
  159 + QFutureSynchronizer<void> futures;
159 160 foreach (br::Distance *distance, distances)
160   - if (Globals->parallelism) futures.append(QtConcurrent::run(distance, &Distance::train, data));
161   - else distance->train(data);
162   - QtUtils::waitForFinished(futures);
  161 + if (Globals->parallelism) futures.addFuture(QtConcurrent::run(distance, &Distance::train, data));
  162 + else distance->train(data);
  163 + futures.waitForFinished();
163 164 }
164 165  
165 166 float compare(const Template &a, const Template &b) const
... ...
sdk/plugins/meta.cpp
... ... @@ -14,6 +14,7 @@
14 14 * limitations under the License. *
15 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16  
  17 +#include <QFutureSynchronizer>
17 18 #include <QtConcurrentRun>
18 19 #include <openbr_plugin.h>
19 20  
... ... @@ -284,12 +285,12 @@ class ForkTransform : public CompositeTransform
284 285  
285 286 void train(const TemplateList &data)
286 287 {
287   - QList< QFuture<void> > futures;
  288 + QFutureSynchronizer<void> futures;
288 289 for (int i=0; i<transforms.size(); i++) {
289   - if (Globals->parallelism) futures.append(QtConcurrent::run(_train, transforms[i], &data));
290   - else _train (transforms[i], &data);
  290 + if (Globals->parallelism) futures.addFuture(QtConcurrent::run(_train, transforms[i], &data));
  291 + else _train (transforms[i], &data);
291 292 }
292   - QtUtils::waitForFinished(futures);
  293 + futures.waitForFinished();
293 294 }
294 295  
295 296 void backProject(const Template &dst, Template &src) const {Transform::backProject(dst, src);}
... ... @@ -634,16 +635,13 @@ public:
634 635 output_buffer.append(TemplateList());
635 636 }
636 637  
637   - QList< QFuture<void> > futures;
638   - futures.reserve(src.size());
  638 + QFutureSynchronizer<void> futures;
639 639 for (int i=0; i<src.size(); i++) {
640 640 input_buffer[i].append(src[i]);
641   - if (Globals->parallelism)
642   - futures.append(QtConcurrent::run(_projectList, transform, &input_buffer[i], &output_buffer[i]));
643   - else
644   - _projectList(transform, &input_buffer[i], &output_buffer[i]);
  641 + if (Globals->parallelism) futures.addFuture(QtConcurrent::run(_projectList, transform, &input_buffer[i], &output_buffer[i]));
  642 + else _projectList( transform, &input_buffer[i], &output_buffer[i]);
645 643 }
646   - QtUtils::waitForFinished(futures);
  644 + futures.waitForFinished();
647 645  
648 646 for (int i=0; i<src.size(); i++) dst.append(output_buffer[i]);
649 647 }
... ...
sdk/plugins/normalize.cpp
... ... @@ -14,6 +14,7 @@
14 14 * limitations under the License. *
15 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16  
  17 +#include <QFutureSynchronizer>
17 18 #include <QtConcurrentRun>
18 19 #include <opencv2/imgproc/imgproc.hpp>
19 20 #include <opencv2/highgui/highgui.hpp>
... ... @@ -120,16 +121,16 @@ private:
120 121 bv.push_back(Mat(1, dims, CV_64FC1));
121 122 }
122 123  
123   - QList< QFuture<void> > futures;
  124 + QFutureSynchronizer<void> futures;
124 125 const bool parallel = (data.size() > 1000) && Globals->parallelism;
125 126 for (size_t c = 0; c < mv.size(); c++) {
126 127 for (int i=0; i<dims; i++)
127   - if (parallel) futures.append(QtConcurrent::run(_train, method, mv[c], &av[c], &bv[c], i));
128   - else _train (method, mv[c], &av[c], &bv[c], i);
  128 + if (parallel) futures.addFuture(QtConcurrent::run(_train, method, mv[c], &av[c], &bv[c], i));
  129 + else _train (method, mv[c], &av[c], &bv[c], i);
129 130 av[c] = av[c].reshape(1, data.first().m().rows);
130 131 bv[c] = bv[c].reshape(1, data.first().m().rows);
131 132 }
132   - QtUtils::waitForFinished(futures);
  133 + futures.waitForFinished();
133 134  
134 135 merge(av, a);
135 136 merge(bv, b);
... ...
sdk/plugins/validate.cpp
  1 +#include <QFutureSynchronizer>
1 2 #include <QtConcurrentRun>
2 3 #include <openbr_plugin.h>
3 4  
4   -#include "core/qtutils.h"
5   -
6 5 namespace br
7 6 {
8 7  
... ... @@ -36,16 +35,16 @@ class CrossValidateTransform : public MetaTransform
36 35 return;
37 36 }
38 37  
39   - QList< QFuture<void> > futures;
  38 + QFutureSynchronizer<void> futures;
40 39 for (int i=0; i<numPartitions; i++) {
41 40 TemplateList partitionedData = data;
42 41 for (int j=partitionedData.size()-1; j>=0; j--)
43 42 if (partitions[j] == i)
44 43 partitionedData.removeAt(j);
45   - if (Globals->parallelism) futures.append(QtConcurrent::run(transforms[i], &Transform::train, partitionedData));
46   - else transforms[i]->train(partitionedData);
  44 + if (Globals->parallelism) futures.addFuture(QtConcurrent::run(transforms[i], &Transform::train, partitionedData));
  45 + else transforms[i]->train(partitionedData);
47 46 }
48   - QtUtils::waitForFinished(futures);
  47 + futures.waitForFinished();
49 48 }
50 49  
51 50 void project(const Template &src, Template &dst) const
... ...