[eigen] RFC: Eigen 2 design |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
Hi, 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 copy-on-write. Thus there's a lot of work to do here, and help is welcome :) Cheers, Benoit [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/ |