The numbers I sent out in my follow up email does indeed use 1 instead of Dynamic.
You are right about the lazyProduct. It completely changes the results.
1 2 3 4 5 6 7 8 9 10
------------------------------------------------------------
1| 0.80 1.00 0.86 0.86 1.00 1.00 0.90 0.90 1.00 1.00
2| 0.83 1.00 0.89 0.91 0.92 0.93 0.94 0.94 0.95 1.00
3| 0.86 1.00 1.00 0.92 1.00 0.94 1.06 1.00 1.00 1.00
4| 0.88 0.91 0.92 0.94 0.95 0.95 0.92 0.96 1.00 0.97
5| 0.88 1.00 1.00 0.94 0.95 0.95 1.00 1.00 1.03 1.03
6| 0.89 0.93 0.94 0.95 0.92 0.96 0.97 1.00 1.00 1.05
7| 1.00 0.93 0.94 0.95 1.00 1.00 1.00 0.97 0.98 1.00
8| 0.91 0.94 0.95 0.96 0.97 0.94 1.00 0.98 0.92 1.00
9| 0.91 1.00 1.00 1.00 0.97 0.97 0.93 0.92 0.98 1.08
10| 1.00 0.95 1.00 1.00 0.97 0.98 0.85 1.06 1.04 1.07
1 2 3 4 5 6 7 8 9 10
------------------------------------------------------------
1| 0.60 0.64 0.73 0.75 0.83 0.77 0.79 0.86 0..87 0.88
2| 0.58 0.69 0.75 0.81 0.82 0.86 0.87 0.88 0.89 0.90
3| 0.62 0.72 0.81 0.85 0.88 0.89 0.95 0.97 0..96 0.96
4| 0.60 0.75 0.83 0.87 0.90 0.93 0.95 0.97 0.97 0.97
5| 0.68 0.82 0.89 0.93 0.95 0.98 0.99 1.01 0..93 1.12
6| 0.67 0.81 0.88 0.91 0.95 0.97 0.99 1.02 1.01 1.00
7| 0.73 0.88 0.93 0.96 0.97 1.01 1.03 1.03 1..03 1.17
8| 0.72 0.87 0.93 0.95 0.99 1.00 1.02 1.05 1.04 1.04
9| 0.78 0.91 0.94 0.98 1.00 0.96 1.06 0.98 1..05 1.16
10| 0.78 0.89 0.94 0.98 0.99 0.98 1.05 1.00 1.05 1.04
In our other benchmarks, we are now within a few percent of eigen2's performance, which is good enough for us. We work with block sparse matrices in our work, where the blocks are typically in the 2-10 range. So Eigen's performance on small matrices is of great interest to us.