Commit f0dc2607d9d798c69382fefd5d8ca4f0251dbebc
1 parent
952f60e6
more future refactoring
Showing
6 changed files
with
37 additions
and
45 deletions
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 &dst, TemplateList &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 &target, const TemplateList &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 | ... | ... |