[eigen] Can I force (or hint) Eigen to not vectorise a particular expression? |

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]

*To*: <eigen@xxxxxxxxxxxxxxxxxxx>*Subject*: [eigen] Can I force (or hint) Eigen to not vectorise a particular expression?*From*: <Daniel.Vollmer@xxxxxx>*Date*: Mon, 21 Apr 2014 11:10:24 +0000*Accept-language*: en-US, de-DE*Thread-index*: Ac9dT1ErNVrYS2XqQdqhWmBXRCXIiQ==*Thread-topic*: Can I force (or hint) Eigen to not vectorise a particular expression?

Hi, I've got some dynamic matrices, whose size is rather small (say 5x5) which I multiply by vectors a lot. Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> block(5, 5); The vectorisation overhead for these small dynamic matrices is bigger than the gain (verified with -DEIGEN_DONT_VECTORIZE). Without the DONT_VECTORIZE define (because I don't want this behaviour everywhere), is there a way to tell Eigen not to vectorise a particular expression or operations on the matrix? My current inner loop looks like this (SparseBlockMatrix * BlockVector) Eigen::Matrix<typename ResultDerived::Scalar, ResultDerived::ColsAtCompileTime, 1, ResultDerived::PlainObject::Options & ~Eigen::RowMajor, ResultDerived::MaxColsAtCompileTime, 1> blockSum(blockRows); for (IndexT outer = 0; outer < GetNumOuter(); ++outer) { blockSum.setZero(); for (auto innerIt = InnerIteratorBegin(outer), end = InnerIteratorEnd(outer); innerIt != end; ++innerIt) { assert(blockRows == innerIt->rows()); assert(blockCols == innerIt->cols()); blockSum.noalias() += (*innerIt) * vector.row(innerIt..col()).transpose(); } result.row(outer) = blockSum; } The blockSum.noalias() += (*innerIt) * vector.row(innerIt..col()).transpose(); line leads me to Eigen::internal::general_matrix_vector_product, where ~83% of my time is spent. For a particular test-case using various 5x5 matrices, the timings are as follows - 13908 ms with dynamic 5x5 matrices - 10271 ms with dynamic 5x5 matrices and EIGEN_DONT_VECTORIZE - 4745 ms with fixed-size 5x5 matrices (not vectorized either way) Best regards Daniel Vollmer -------------------------- Deutsches Zentrum für Luft- und Raumfahrt e.V. (DLR) German Aerospace Center Institute of Aerodynamics and Flow Technology | Lilienthalplatz 7 | 38108 Braunschweig | Germany

**Follow-Ups**:**Re: [eigen] Can I force (or hint) Eigen to not vectorise a particular expression?***From:*Christoph Hertzberg

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] is there a policy on committing bugfixes to a release branch?** - Next by Date:
**Re: [eigen] Can I force (or hint) Eigen to not vectorise a particular expression?** - Previous by thread:
**Re: [eigen] is there a policy on committing bugfixes to a release branch?** - Next by thread:
**Re: [eigen] Can I force (or hint) Eigen to not vectorise a particular expression?**

Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |