Eigen (C++ library)
Eigen is a template header-only C++ linear algebra library. It is one of the fastest and most popular.
For optimal performance, I recommend using the following flags when compiling.
-mfmaEnable fused multiply add
-mavx2Enable avx2 vector instructions
-DEIGEN_NO_DEBUGSet preprocessor define for eigen optimizations
-fopenmpOpenMP parallel execution
Data to Eigen
You can use
Eigen::Map to create an eigen view for your existing data.
Eigen comes with a few SVD implementations in its SVD Module.
If you only need low-rank approximations then you may be interested in randomized SVD.
This can be 10-20x faster when calculating low-rank approximations on large matrices.
Finding structure with randomness paper
Facebook Blog post