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.

Wiki: ROS/MathLibraries (last edited 2009-08-14 20:54:34 by localhost)