Make Eigen run in parallel

Some Eigen's algorithms can exploit the multiple cores present in your hardware. To this end, it is enough to enable OpenMP on your compiler, for instance: GCC: -fopenmp ICC: -openmp MSVC: check the respective option in the build properties. You can control the number of thread that will be used using either the OpenMP API or Eigen's API using the following priority:

OMP_NUM_THREADS=n ./my_program

omp_set_num_threads(n);

Eigen::setNbThreads(n);

Unless setNbThreads has been called, Eigen uses the number of threads specified by OpenMP. You can restore this behavior by calling

setNbThreads(0);

You can query the number of threads that will be used with:

n = Eigen::nbThreads( );

You can disable Eigen's multi threading at compile time by defining the EIGEN_DONT_PARALLELIZE preprocessor token.

note that all functions generating random matrices are not re-entrant nor thread-safe. Those include DenseBase::Random(), and DenseBase::setRandom() despite a call to Eigen::initParallel(). This is because these functions are based on std::rand which is not re-entrant. For thread-safe random generator, we recommend the use of boost::random or c++11 random feature.

In the case your application is parallelized with OpenMP, you might want to disable Eigen's own parallization as detailed in the previous section.