diff options
author | Gael Guennebaud <g.gael@free.fr> | 2008-06-28 23:07:14 +0000 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2008-06-28 23:07:14 +0000 |
commit | 027818d7392dbb4f12db17bb9f35032727bb1a30 (patch) | |
tree | 437f31b0b222f9ad4d8e6351ba8dc6a0e00f1b8b /Eigen/src/Core/Assign.h | |
parent | 6917be911311428567bbde2a5db430d8c2c9ef96 (diff) |
* added innerSize / outerSize functions to MatrixBase
* added complete implementation of sparse matrix product
(with a little glue in Eigen/Core)
* added an exhaustive bench of sparse products including GMM++ and MTL4
=> Eigen outperforms in all transposed/density configurations !
Diffstat (limited to 'Eigen/src/Core/Assign.h')
-rw-r--r-- | Eigen/src/Core/Assign.h | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/Eigen/src/Core/Assign.h b/Eigen/src/Core/Assign.h index d20ab7446..b46e1887b 100644 --- a/Eigen/src/Core/Assign.h +++ b/Eigen/src/Core/Assign.h @@ -204,8 +204,8 @@ struct ei_assign_impl<Derived1, Derived2, NoVectorization, NoUnrolling> static void run(Derived1 &dst, const Derived2 &src) { const bool rowMajor = int(Derived1::Flags)&RowMajorBit; - const int innerSize = rowMajor ? dst.cols() : dst.rows(); - const int outerSize = rowMajor ? dst.rows() : dst.cols(); + const int innerSize = dst.innerSize(); + const int outerSize = dst.outerSize(); for(int j = 0; j < outerSize; j++) for(int i = 0; i < innerSize; i++) { @@ -233,7 +233,7 @@ struct ei_assign_impl<Derived1, Derived2, NoVectorization, InnerUnrolling> { const bool rowMajor = int(Derived1::Flags)&RowMajorBit; const int innerSize = rowMajor ? Derived1::ColsAtCompileTime : Derived1::RowsAtCompileTime; - const int outerSize = rowMajor ? dst.rows() : dst.cols(); + const int outerSize = dst.outerSize(); for(int j = 0; j < outerSize; j++) ei_assign_novec_InnerUnrolling<Derived1, Derived2, 0, innerSize> ::run(dst, src, j); @@ -250,8 +250,8 @@ struct ei_assign_impl<Derived1, Derived2, InnerVectorization, NoUnrolling> static void run(Derived1 &dst, const Derived2 &src) { const bool rowMajor = int(Derived1::Flags)&RowMajorBit; - const int innerSize = rowMajor ? dst.cols() : dst.rows(); - const int outerSize = rowMajor ? dst.rows() : dst.cols(); + const int innerSize = dst.innerSize(); + const int outerSize = dst.outerSize(); const int packetSize = ei_packet_traits<typename Derived1::Scalar>::size; for(int j = 0; j < outerSize; j++) { @@ -282,7 +282,7 @@ struct ei_assign_impl<Derived1, Derived2, InnerVectorization, InnerUnrolling> { const bool rowMajor = int(Derived1::Flags)&RowMajorBit; const int innerSize = rowMajor ? Derived1::ColsAtCompileTime : Derived1::RowsAtCompileTime; - const int outerSize = rowMajor ? dst.rows() : dst.cols(); + const int outerSize = dst.outerSize(); for(int j = 0; j < outerSize; j++) ei_assign_innervec_InnerUnrolling<Derived1, Derived2, 0, innerSize> ::run(dst, src, j); @@ -337,8 +337,8 @@ struct ei_assign_impl<Derived1, Derived2, SliceVectorization, NoUnrolling> { const int packetSize = ei_packet_traits<typename Derived1::Scalar>::size; const bool rowMajor = Derived1::Flags&RowMajorBit; - const int innerSize = rowMajor ? dst.cols() : dst.rows(); - const int outerSize = rowMajor ? dst.rows() : dst.cols(); + const int innerSize = dst.innerSize(); + const int outerSize = dst.outerSize(); const int alignedInnerSize = (innerSize/packetSize)*packetSize; for(int i = 0; i < outerSize; i++) |