我正在尝试使用 eigen 中的 sparsesuite SPQR 支持模块来解决启用多线程的系统。
我已经用 -fopenmp 标志和 tbb 编译了相应的库。我正在运行的是
uint n = Eigen::nbThreads();
vec b = ...; //vector of size ~ 10000
Eigen::SPQR<Eigen::SparseMatrix<double>> qr;
qr.setPivotThreshold(1e-6);
qr.compute(H0); //H0 is a Eigen::SparseMatrix<double> 10000 x 1000
vec a = qr.solve(b);
使用不同数量的线程(1、2、4、16)运行它,即使 Eigen::nbThreads() 返回正确的值,我也看到绝对没有加速。
如果我改用共轭梯度,增加线程数有明显的好处。
所以我的问题是:你知道为什么并行化似乎不能使用 SPQR 吗?我在某个地方忘记了什么吗?
提前感谢您的回答,