0

我正在尝试使用 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 吗?我在某个地方忘记了什么吗?

提前感谢您的回答,

4

0 回答 0