On 04/11/2011 01:42 PM, Nasos Iliopoulos wrote:
Umut
a partial answer to the items of your question:
The main performance difference between eigen and ublas is that eigen
performs explicit vectorization: the operations are put on special
registers that allow for the execution of multiple instructions per
cycle (SIMD).
Modern cpus have 128 bits per register, allowing 4 floats or 2 doubles
to be stored (and operated upon) simultaneously. This means that the
performance gain you have for double precision (If you are using a
linear algebra system for anything other than programming graphics,
probably you want to be using double precision), is at most about 2.
That is what is expected from eigen over uBlas at most, but this is not
the full story.
Hi Nasos,
Thanks for the detailed explanation, very nice pointer to gcc pages
Please also be aware that there are things that can be done to improve
the performance of certain uBlas algorithms that are not optimal at the
moment.
What are they, could you share them with me as far as you know. For the
moment, what I would like to do is to test my prototype codes, these
are basically in MATLAB or Octave, in a fast language, where I can
check the real cpu time on large models, I have had experience with
uBlas and digged a lot through the mailing list to find some important
undocumented information, I would not like to do the same with eigen,
that is the reason I am cautious on the topic. As far as I can see
sparse module of eigen is also not that mature and you even have to
define a preprocessor macro to use the sparse module to circumvent this
problem.
I am guessing that ublas is not that drastically slow in comparison to
eigen for, especially large matrix sizes, because the benchmarks on
eigen page are for relatively lower size of matrix-vector products,
however I will give a test myself shortly.
Thanks and best regards,
Umut