Eigen (C++ library): Difference between revisions
Line 17: | Line 17: | ||
===Data to Eigen=== | ===Data to Eigen=== | ||
You can use <code>Eigen::Map</code> to create an eigen view for your existing data.<br> | You can use [https://eigen.tuxfamily.org/dox/classEigen_1_1Map.html <code>Eigen::Map</code>] to create an eigen view for your existing data. | ||
This works with aligned or unaligned data, row-order or column-order, and different strides.<br> | |||
See [https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html Eigen: Interfacing with raw buffers] for an example. | |||
==Math== | ==Math== |
Revision as of 20:06, 16 April 2024
Eigen is a template header-only C++ linear algebra library. It is one of the fastest and most popular.
Usage
Compilation
Reference
For optimal performance, I recommend using the following flags when compiling.
GCC
-march=native
and-mtune=native
if running only locally or-march=skylake
if distributing to (Core ix-5000+) cpus.- Otherwise, at a minimum
-mfma
Enable fused multiply add-mavx2
Enable avx2 vector instructions
-DEIGEN_NO_DEBUG
Set preprocessor define for eigen optimizations-fopenmp
OpenMP parallel execution-O3
to enable optimizations
Data to Eigen
You can use Eigen::Map
to create an eigen view for your existing data.
This works with aligned or unaligned data, row-order or column-order, and different strides.
See Eigen: Interfacing with raw buffers for an example.
Math
SVD
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.
Github Implementation
Finding structure with randomness paper
Facebook Blog post