2016-05-14 7 views
5

Ich bin gewohnt für fast alle meine mathematische lineare Algebra arbeiten. Vor kurzem habe ich entdeckt, dass Boost auch eine C++ Template-Klassenbibliothek bereitstellt, die Basic Linear Algebra Library (Boost::uBLAS) bereitstellt. Das hat mich neugierig gemacht, ob ich meine ganze Arbeit nur auf Basis von Boost bekommen kann, da es bereits eine Hauptbibliothek für meinen Code ist.Boost :: uBLAS vs Eigen

Ein genauerer Blick auf beide habe hat mich nicht wirklich eine deutlichere Unterscheidung zwischen ihnen:

  • boost :: uBLAS:

uBLAS bietet Templat-C++ Klassen für dichte, Einheit und spärliche Vektoren, dicht, Identität, dreieckig, gebändert, symmetrisch, hermitesche und spärliche Matrizen. Ansichten in Vektoren und Matrizen können über Bereiche, Slices, Adapterklassen und indirekte Arrays erstellt werden. Die Bibliothek deckt die üblichen grundlegenden Operationen der linearen Algebra auf Vektoren und Matrizen ab: Reduktionen wie verschiedene Normen, Addition und Subtraktion von Vektoren und Matrizen und Multiplikation mit einem Skalar, innere und äußere Produkte von Vektoren, Matrixvektor und Matrixmatrixprodukte und Dreieckslöser.

...

  • Eigen:

Es unterstützt alle Matrixgrößen von kleinen fester Größe Matrizen beliebig große, dichte Matrizen und sogar schwach besetzte Matrizen.

Es unterstützt alle numerischen Standardtypen, einschließlich std :: complex, Ganzzahlen, und kann problemlos auf benutzerdefinierte numerische Typen erweitert werden.

Es unterstützt verschiedene Matrixzerlegungs- und Geometriefunktionen.

Das Ökosystem der nicht unterstützten Module bietet viele spezielle Funktionen wie nichtlineare Optimierung, Matrixfunktionen, einen Polynomlöser, FFT und vieles mehr.

...

Hat jemand eine bessere Vorstellung über ihre wichtigsten Unterschiede und auf welcher Grundlage können wir zwischen ihnen wählen?

Antwort

2

Wählen Sie "Eigen", wenn Sie Wert auf die von Expression-Vorlagen eingeführte Leistungs- und Leistungssteigerung legen, und wählen Sie "uBlas", wenn Sie nur Expression-Vorlagen lernen möchten.

http://eigen.tuxfamily.org/index.php?title=Benchmark

+0

Eigen verwendet auch Expressionsvorlagen. –

+0

@quant_dev Ich habe es deutlicher gemacht. – kangshiyin

+0

Beachten Sie, dass diese Benchmarks ziemlich alt sind (ab 2011) und nicht unabhängig sind. –

1

Ich habe gerade eine Zeitkomplexität Vergleich zwischen Auftrieb und Eigen für ziemlich trivial Matrixberechnungen. Diese begrenzten Ergebnisse deuten darauf hin, dass der Boost eine viel bessere Alternative ist. Ich hatte einen FEM-Code, der die Pre-Processing-Teile (Einrichten der Elementmatrizen und Zusammenfügen). Dies würde natürlich eine Menge Speicherzuweisungen erfordern.

enter image description here

Ich schrieb identische Teile von Codes mit Boost und Eigen auf C++ (gcc 5.4.0, ubuntu 16.04, i3 Intel Quad Core, 2.40GHz, RAM: 4Gb) und lief sie separat für variierende Knotengrößen (N) und berechnete Zeit mit dem Linux CL-Utility. Soweit es mich betrifft, habe ich beschlossen, mit meinem Code in Boost fortzufahren.

+0

Wirkt sich die Speicherzuweisung auf das Ergebnis aus? –

+4

Welchen Vorgang führen Sie hier durch? – myradio

+1

Sie sollten unbedingt die Quelle für diesen Benchmark angeben! – Synxis