--- In Boost-Users@y..., Walter Bowen
Hi, I am new to uBLAS. I am looking to see if it will be useful for my application (I develop 6-Degrees-of-freedom flight simulations used to analyze avionics systems.) I have benchmarked a few lines of code with RogueWave's Math.h++ (testing for execution speed) and made the following observation.
Observation 1) For matrix products of two small (~3-by-3) matrices ( i.e., prod(smallMat1, smallMat2) ) uBLAS executes MUCH FASTER than Math.h++.
Observation 2) For matrix produces of two large matrices (100 by
Fine. 100)
uBLAS and Math.h++ give similar execuation speed.
As Toon already pointed out, you could try 1000 by 1000 matrices to check, if math.h++ uses blocked operations internally (which uBLAS doesn't).
Obervation 3) (This is the kicker...) for strung-together matrix products like "Mat1 * Mat2 * Mat3 * Mat4 * Mat5", which I am implementing as "prod(Mat1, prod(Mat2, prod( Mat3, prod(Mat4,Mat5) ) ) ) Math.h++ is MUCH MUCH FASTER than uBLAS. -- by ~2 orders OF MAGNITUDE! I believe that this is a characteristic of the scalability of template expressions.
Correct. This observation was first stated by Benedikt Weber during uBLAS review: http://lists.boost.org/MailArchives/boost/msg31283.php
My question is this: Is there a way I an instruct uBLAS not to use template expressions when for strung-together matrix products?
You could reintroduce temporaries directly
prod(Mat1,
matrix