Eigen默认使用OpenMP实现多线程并行运算,但并不是所有计算都是支持多线程的。在目前最新的Eigen 3.3.5中,支持多线程的函数有以下:
- 稠密矩阵乘法
- PartialPivLU分解
- 行优先稀疏矩阵 * 稠密矩阵(或稠密向量)
- 共轭梯度求解器ConjugateGradient,其中
UpLo
模板参数必须为Lower|Upper
- 使用行优先稀疏矩阵的BiCGSTAB
- 最小二乘共轭梯度求解器LeastSquaresConjugateGradient
同时,要使用多线程,需要编译器和链接器开启OpenMP选项:
- 对于GCC系编译器:添加-fopenmp选项
- 对于ICC编译器:添加-openmp选项
- 对于MSVC编译器:在项目属性-C/C++-语言里启用OpenMP支持,或者添加/openmp选项
Reference
https://eigen.tuxfamily.org/dox/TopicMultiThreading.html