Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I was actually unfamiliar with ATLAS, but I am familiar with Eigen, which I use whenever implementing matrix operations in C++: http://eigen.tuxfamily.org

With so many available options, you should never really be implementing your own matrix multiplication.



Figuring out which libary to use is a huge PITA. I don't really understand when I should use uBLAS, mtl, or eigen or whatever else is out there.

Anyone have some insight?


I'm not exactly an expert on this kind of thing, but from what I understand, Eigen and Armadillo [1] are the best performing libraries in this space. I'd probably go with Eigen, since it appears to be used in more high-profile places and thus more likely to keep being maintained.

uBLAS, on the other hand, does not perform that well in comparison, but it is more likely to keep being maintained as part of Boost.

Blaze [2] is supposed to be very high-performance, but it is relatively new, so there's no way to tell where the chips may fall on this one.

[1] http://arma.sourceforge.net/

[2] https://code.google.com/p/blaze-lib/


Armadillo is also used in pretty well known places: NASA, Siemens, Intel, Boeing, Stanford, CMU, MIT, Schlumberger, Deutsche Bank, US Navy, etc. (source: access logs for Armadillo website).

It's also the basis for the MLPACK machine learning library: http://mlpack.org/

Additionally, there are Armadillo bindings to Python and the R language:

http://sourceforge.net/projects/armanpy/

http://cran.r-project.org/web/packages/RcppArmadillo/


how about ATLAS ?


Well, I was comparing apples to apples (i.e., C++ expression template linear algebra libraries). Some (most?) of them [1,2] are linkable against BLAS routines from Intel MKL or ATLAS or whatever.

[1] http://eigen.tuxfamily.org/dox/TopicUsingIntelMKL.html

[2] http://arma.sourceforge.net/faq.html#dependencies


Thanks for that clarification




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: