[eigen] RFC: Eigen 2 design

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Here's my plan for Eigen 2. Let's split Eigen into two submodules:

- eigen-basic will do only fixed-size. It will reuse the Eigen1 code, but 
specializing it to fixed-size-only. No "curiously recursive template pattern" 
anymore. It will allow rectangular matrices. Eigen-basic is the part that 
will be used the most in OpenGL apps, games, etc. Low-level optimizations 
like SSE are most welcome here.

- eigen-gmm will be a wrapper around GMM [1], providing dynamic-size (both 
dense and sparse representations). By reusing GMM we avoid of course the hard 
work. The value-added of wrapping it is that GMM has a pretty spartan C-style 
API, with not even arithmetic operators. The reason why the GMM authors 
decided to do so, is that arithmetic operators return objects by value, which 
causes a deep copy, which is slow. I have the feeling that we could implement 
copy-on-write as in Qt, and that that would solve the problem here. It would 
be almost as efficient as expression templates, without the hassle for the 
programmer and the compiler.

There will be ways of converting between the various matrix and vector types, 
including ways of converting between fixedsize (eigen-basic) and dynamic-size 
(eigen-gmm). Probably in the form of conversion constructors and operators.

The Eigen package should contain both eigen-basic and eigen-gmm, but it should 
also be possible to release eigen-basic as a standalone package.

GMM should live in a subdirectory of its own and be usable directly by apps 
wanting it.

Eigen-gmm can't reuse GMM by inheritance, if only because we want to implement 

Thus there's a lot of work to do here, and help is welcome :)


[1] http://www-gmm.insa-toulouse.fr/getfem/gmm_intro
GMM is already being used by Krita. It's the only library that we know of 
that: provides dense and sparse matrices, provides many algorithms, is 
actively developed, has clean code, has no licensing issues.

Attachment: pgpsAev80B4ZH.pgp
Description: PGP signature

Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/