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