PyEigen 0.2 feature complete
After a couple of weeks of hiatus, the 0.2 release of PyEigen is now feature complete. What's left is some testing and documentation, then release. I postponed quaternions and transformations to 0.3 because variable-size matrices were plenty of work for a single release and single programmer already; I don't want too much time between releases at such an early stage. If I'm not too busy, PyEigen 0.2 should be released in a week or two.
I did some benchmarking on 1000x1000 matrices. Insanely, enabling SSE2 instructions speeded up that test case by 10x; I was expecting a 4x increase at most, since SSE instructions handle 4 times the data per instruction. NumPy is slightly faster for 1000x1000 matrix multiplication, but there's an obvious optimization in PyEigen that will hopefully make it faster again. That will have to wait for 0.3 though, since it's a bit tedious to implement. For those interested: there's an extra matrix copy in all PyEigen functions and operators that return a value, which I can probably optimize away.
BTW, if you want more frequent progress updates, you can follow my Twitter feed.

May 3rd, 2010 - 22:02
With SSE, intel CPUs can perform an add and a mul simultaneously in 1 cycle, which allows an extra x2 speed increase, and applies very well to matrix multiplication. So it is realistic that SSE gives a total x8 speed increase over the 80×87 instructions, in that case. For 10x, I dont know, we’d need to check the assembly to understand.
NumPy is using a BLAS implementation, and for these large matrix sizes, the wrapping overhead is negligible, so NumPy has the performance of the BLAS that it wraps. So it doesn’t make much sense to talk about NumPy’s performance, for large matrix products. If you let NumPy use Intel MKL, it’ll be as fast as Intel MKL, which we don’t hope to ever beat, although we’re not far behind and the development branch comes very close to it.
May 3rd, 2010 - 23:00
Thanks for the informative comment. I know very little about low-level optimization, so it’s good someone is doing it for me!