diff options
author | 2010-03-01 10:57:32 +0100 | |
---|---|---|
committer | 2010-03-01 10:57:32 +0100 | |
commit | aeff3ff391958734b5e1b2411f4ac5fdc30da08b (patch) | |
tree | 41a776de7fa0ddd9a64eae205387fb0b6c2294f1 /Eigen/src/Core/products/Parallelizer.h | |
parent | 6924bf2e99749773e1ae93caa2f60a1e3b386a0c (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.h | 18 |
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); } |