shogun-toolbox/shogun — pull request #2217 by lambday (2014-05-10 19:16:43+00:00)
Title: Linear algebra unifying backend (WIP) - First draft

Structure
============
linalg is divided in modules, for example
```
linalg
|--- Redux (reduction module)
| |--- norm (matrix and vector)
| |--- dot
| '--- sum (various sum methods on matrix and vector)
|--- LinSolver
| |--- Cholesky
| |--- QR
| '--- SVD
|--- EigSolver
| |--- Blah
| '--- Blah
'---Misc (IDK :D)
```
Facilities
============
Now, we can set backends in compile time via cmake options. It can be used to
- Set a particular backend (say, Eigen3) for all the linalg modules via `-DSetLinalgLib=EIGEN3` cmake option
- Set module specific backends (say, LinSolver) via `-DSetLinSlvLib=EIGEN3` options and so
- Some default backends are always set. Which backend should be used as default that is left up to API designers (kept it as Eigen3)
- For users, they can always use any particular backend they want via especially mentioning the backend, no matter what global backend was set initially.
- All of these are done in compile time for faster execution