Eigen (C++ library): Difference between revisions
Appearance
| Line 8: | Line 8: | ||
For optimal performance, I recommend using the following flags when compiling.<br> | For optimal performance, I recommend using the following flags when compiling.<br> | ||
====GCC==== | ====GCC==== | ||
*<code>-march=native</code> and <code>-mtune=native</code> if running only locally or <code>-march=skylake</code> if distributing to ( | *<code>-march=native</code> and <code>-mtune=native</code> if running only locally or <code>-march=skylake</code> if distributing to relatively modern (since ~2015) cpus. | ||
**Otherwise, at a minimum | **Otherwise, at a minimum | ||
**<code>-mfma</code> Enable fused multiply add | **<code>-mfma</code> Enable fused multiply add | ||
Revision as of 20:07, 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=nativeand-mtune=nativeif running only locally or-march=skylakeif distributing to relatively modern (since ~2015) cpus.- Otherwise, at a minimum
-mfmaEnable fused multiply add-mavx2Enable avx2 vector instructions
-DEIGEN_NO_DEBUGSet preprocessor define for eigen optimizations-fopenmpOpenMP parallel execution-O3to 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