You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.6 KiB

  1. namespace Eigen {
  2. /** \page TopicMultiThreading Eigen and multi-threading
  3. \section TopicMultiThreading_MakingEigenMT Make Eigen run in parallel
  4. 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:
  5. * GCC: \c -fopenmp
  6. * ICC: \c -openmp
  7. * MSVC: check the respective option in the build properties.
  8. You can control the number of thread that will be used using either the OpenMP API or Eiegn's API using the following priority:
  9. \code
  10. OMP_NUM_THREADS=n ./my_program
  11. omp_set_num_threads(n);
  12. Eigen::setNbThreads(n);
  13. \endcode
  14. Unless setNbThreads has been called, Eigen uses the number of threads specified by OpenMP. You can restore this bahavior by calling \code setNbThreads(0); \endcode
  15. You can query the number of threads that will be used with:
  16. \code
  17. n = Eigen::nbThreads(n);
  18. \endcode
  19. You can disable Eigen's multi threading at compile time by defining the EIGEN_DONT_PARALLELIZE preprocessor token.
  20. Currently, the following algorithms can make use of multi-threading:
  21. * general matrix - matrix products
  22. * PartialPivLU
  23. \section TopicMultiThreading_UsingEigenWithMT Using Eigen in a multi-threaded application
  24. In the case your own application is multithreaded, and multiple threads make calls to Eigen, then you have to initialize Eigen by calling the following routine \b before creating the threads:
  25. \code
  26. #include <Eigen/Core>
  27. int main(int argc, char** argv)
  28. {
  29. Eigen::initParallel();
  30. ...
  31. }
  32. \endcode
  33. In the case your application is parallelized with OpenMP, you might want to disable Eigen's own parallization as detailed in the previous section.
  34. */
  35. }