aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/products/Parallelizer.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2010-03-01 10:57:32 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2010-03-01 10:57:32 +0100
commitaeff3ff391958734b5e1b2411f4ac5fdc30da08b (patch)
tree41a776de7fa0ddd9a64eae205387fb0b6c2294f1 /Eigen/src/Core/products/Parallelizer.h
parent6924bf2e99749773e1ae93caa2f60a1e3b386a0c (diff)
make Aron's idea work using Qt's atomic implementation for the synchronisation
Diffstat (limited to 'Eigen/src/Core/products/Parallelizer.h')
-rw-r--r--Eigen/src/Core/products/Parallelizer.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/Eigen/src/Core/products/Parallelizer.h b/Eigen/src/Core/products/Parallelizer.h
index ad998572b..620a5e8ba 100644
--- a/Eigen/src/Core/products/Parallelizer.h
+++ b/Eigen/src/Core/products/Parallelizer.h
@@ -25,13 +25,6 @@
#ifndef EIGEN_PARALLELIZER_H
#define EIGEN_PARALLELIZER_H
-struct GemmParallelInfo
-{
- int rhs_start;
- int rhs_length;
- float* blockB;
-};
-
template<bool Parallelize,typename Functor>
void ei_run_parallel_1d(const Functor& func, int size)
{
@@ -97,6 +90,15 @@ void ei_run_parallel_2d(const Functor& func, int size1, int size2)
#endif
}
+struct GemmParallelInfo
+{
+ QAtomicInt sync;
+ QAtomicInt users;
+ int rhs_start;
+ int rhs_length;
+ float* blockB;
+};
+
template<bool Parallelize,typename Functor>
void ei_run_parallel_gemm(const Functor& func, int rows, int cols)
{
@@ -128,6 +130,8 @@ void ei_run_parallel_gemm(const Functor& func, int rows, int cols)
info[i].rhs_start = c0;
info[i].rhs_length = actualBlockCols;
info[i].blockB = sharedBlockB;
+ info[i].sync.fetchAndStoreOrdered(-1);
+ info[i].users.fetchAndStoreOrdered(0);
func(r0, actualBlockRows, 0,cols, info);
}