Ich habe eine spärliche Matrix A der Größe (91716x91716) mit 3096684 von Null verschiedenen Elementen und einem dichten Vektor rhs. Ich bin die Lösung des Systems mit einem ConjugateGradient auf diese Weise:Eigen ConjugateGradient Solver läuft nicht mit Multithreading
initParallel();
ConjugateGradient<SparseMatrix<double>, Lower|Upper> solver;
solver.compute(A);
const VectorXd response = solver.solve(rhs);
Ich Kompilieren mit:
g++ -O3 -I./eigen -fopenmp -msse2 -DEIGEN_TEST_SSE=ON -o example example.cpp
die Hinrichtung, die beide mit Multi-Threading und ohne, nehme etwa gleich (um 1500 ms). Ich benutze Eigen Version 3.2.8.
Gibt es einen Grund, warum das Multi-Threading nicht besser funktioniert? Ich sehe den Multithreading-Effekt in meinem Systemmonitor tatsächlich nicht. Gibt es andere Möglichkeiten, diesen Prozess zu beschleunigen?
Bearbeiten: Ein Aufruf an Eigen :: nbThreads() reagiert 12 Threads.
Oh, ich glaube, ich wurde deswegen verwirrt: https://eigen.tuxfamily.org/dox-devel/TopicMultiThreading.html – Sara
Welches ist die neueste Version? – Sara
Ihr Dokument ist neuer, aber Sie müssen den Dev-Zweig verwenden – kangshiyin