We have quite a number of math libraries in 3rdparty packages now. We should focus down and choose one or a few. As part of cleaning up 3rd party packages ROS/ThirdPartyDependencies
Options include:
uBlas - (in boost), but only provides BLAS no higher level functions http://www.boost.org/doc/libs/1_37_0/libs/numeric/ublas/doc/overview.htm
- Conclusion: not complete enough to recommend usage.
newmat10 - an option (though we've had problems with svd) http://www.robertnz.net/nm10.htm
- Easy to use, but not very efficient
- SVD apparently doesn't converge properly
- Conclusion: throw it out
lapackpp - a c++ wrapper around LAPACK http://lapackpp.sourceforge.net/ (branched from http://math.nist.gov/lapack++/ ) http://www.netlib.org/lapack/
- Incomplete, will require pushing back patches to expose everything we need.
- lapack is the standard, with which more people are familiar
eigen2 - used in the vision packages http://eigen.tuxfamily.org/index.php?title=Main_Page
- Not as complete as lapack
- Includes most decompositions plus regressions
- Under active development, responsive community
- Comparable performance to Intel MKL and specialized BLAS implementations
much nicer interface than lapack
- sparse matrix operations are currently experimental
- openCV
- Has some stuff, but will likely move to some BLAS implementation
- Conclusion: don't use it.
- refblas
- Not easy to use directly
- Free implementations are generally not fast.
- No reason to use refblas
- atlas, automatically tuned BLAS
- Should be faster than refblas
- Different versions available depending on SSE level -- linker problems.
- Implements part of LAPACK (?)
- BFL has wrappers for uBLAS, NEWMAT, and liblti
Conclusions
- Recommend eigen2 for all new code, with uBLAS to fill in holes (e.g., sparse matrices)
- No NEWMAT
- No OpenCV
- No refblas
- No GSL CBLAS
- No lapackcpp
- Use atlas and/or lapack for existing code, but prefer to switch.