Before investigating further, let me share the answer I gave on the forum:
Prior to Eigen 3.3, it's better if you split:
v3.noalias() += A*v1 + B*v2;
as:
v3.noalias() += A*v1;
v3.noalias() += B*v2;
otherwise one (or two) temporaries will be issued. (in theory, Eigen 3.3 does this splitting for you).
Then, performance of matrix-vector products highly depends on whether the matrices are already in cache. If they are too large, that's never possible, but if they are small enough to fit in L1 or L3, then the performance will be impacted by the evaluation context and the system load. For instance, is your application multi-threaded?
gael