From b4ef323e90789fb30cd3bb43d564cd25817eaf73 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sat, 3 Jul 2010 12:20:13 +0200 Subject: fix bug with openmp --- Eigen/src/Core/products/GeneralMatrixMatrix.h | 8 ++++++-- Eigen/src/Core/products/Parallelizer.h | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Eigen/src/Core/products/GeneralMatrixMatrix.h b/Eigen/src/Core/products/GeneralMatrixMatrix.h index f0816f3ee..295dd8f25 100644 --- a/Eigen/src/Core/products/GeneralMatrixMatrix.h +++ b/Eigen/src/Core/products/GeneralMatrixMatrix.h @@ -228,12 +228,16 @@ struct ei_gemm_functor : m_lhs(lhs), m_rhs(rhs), m_dest(dest), m_actualAlpha(actualAlpha), m_blocking(blocking) {} + void initParallelSession() const + { + m_blocking.allocateB(); + } + void operator() (Index row, Index rows, Index col=0, Index cols=-1, GemmParallelInfo* info=0) const { if(cols==-1) cols = m_rhs.cols(); - if(info) - m_blocking.allocateB(); + Gemm::run(rows, cols, m_lhs.cols(), (const Scalar*)&(m_lhs.const_cast_derived().coeffRef(row,0)), m_lhs.outerStride(), (const Scalar*)&(m_rhs.const_cast_derived().coeffRef(0,col)), m_rhs.outerStride(), diff --git a/Eigen/src/Core/products/Parallelizer.h b/Eigen/src/Core/products/Parallelizer.h index b7fe4151b..e27c8edab 100644 --- a/Eigen/src/Core/products/Parallelizer.h +++ b/Eigen/src/Core/products/Parallelizer.h @@ -108,6 +108,8 @@ void ei_parallelize_gemm(const Functor& func, Index rows, Index cols) if(threads==1) return func(0,rows, 0,cols); + func.initParallelSession(); + Index blockCols = (cols / threads) & ~Index(0x3); Index blockRows = (rows / threads) & ~Index(0x7); -- cgit v1.2.3