Welche Beziehung besteht zwischen BLAS, LAPACK und anderen Bibliotheken für lineare Algebra?


26

Ich habe mir C ++ - Bibliotheken für lineare Algebra für ein Projekt angesehen, an dem ich gearbeitet habe. Was ich immer noch nicht verstehe, ist die Verbindung von BLAS und LAPACK mit anderen Bibliotheken für lineare Algebra.

Als ich diesen Artikel über lineare Algebra-Bibliotheken durchgesehen habe, fand ich es interessant, dass:

  • Einige Bibliotheken sind unabhängig von BLAS und LAPACK
  • Einige erfordern BLAS und LAPACK
  • Einige haben optionale Schnittstellen zu BLAS und LAPACK
  • und so wie ich es verstehe, können Sie BLAS und LAPACK verwenden, um lineare Algebraprobleme direkt zu lösen

Ich kann mir vorstellen, dass einige Bibliotheken einfach C ++ - Schnittstellen zu BLAS- und LAPACK-Bibliotheken sind, die in C und Fortran geschrieben wurden, und andere ihre eigenen Ersatzroutinen implementiert haben, aber

  1. Welche Auswirkungen haben die optionalen Schnittstellen zu BLAS und LAPACK? Was verlieren Sie, wenn Sie sich abmelden, und was machen die Bibliotheken stattdessen?

  2. Bietet eine der Bibliotheken mehr als nur eine Schnittstelle? Beispielsweise ist UMFPACK in C geschrieben und verfügt über optionale Schnittstellen zu BLAS und LAPACK. Was können UMFPACK (oder andere Bibliotheken), was BLAS und LAPACK nicht können?

Antworten:


15

Soweit ich weiß, ist Lapack die einzige öffentlich verfügbare Implementierung einer Reihe von Algorithmen (unsymmetrischer dichter Eigensolver, pseudoquadratischer zeitsymmetrischer Eigensolver, schnelle Jacobi-SVD). Die meisten Bibliotheken, die sich nicht auf BLAS + Lapack verlassen, unterstützen in der Regel sehr primitive Operationen wie Matrixmultiplikation, LU-Faktorisierung und QR-Zerlegung. Lapack enthält einige der ausgefeiltesten Algorithmen für dichte Matrixberechnungen, die meines Erachtens nirgendwo anders implementiert sind.

Um Ihre Fragen (zumindest teilweise) zu beantworten,

  1. Durch das Deaktivieren von BLAS / Lapack fehlen normalerweise keine Funktionen (es sei denn, die optionale Schnittstelle wurde so konzipiert, dass es keine Ersatzimplementierung gibt, was selten vorkommt). Wenn Sie sehr komplexe Operationen ausführen möchten, implementieren diese anderen Bibliotheken diese wahrscheinlich sowieso nicht. Da BLAS sehr gut auf Ihre Architektur abgestimmt werden kann, können Sie möglicherweise auf enorme Geschwindigkeitssteigerungen verzichten (eine Größenordnung der Geschwindigkeitsdifferenz ist nicht ungewöhnlich).

  2. Sie erwähnen UMFPACK, das für die Faktorisierung mit spärlicher Matrix gedacht ist. BLAS / Lapack befasst sich nur mit dichten Matrizen. UMFPACK muss auf einer bestimmten Ebene mit Problemen mittlerer Dichte arbeiten, die mit benutzerdefinierten Implementierungen oder durch Aufrufen von BLAS / Lapack behoben werden können. Hier liegt der Unterschied nur in der Geschwindigkeit.

Wenn die Geschwindigkeit von großer Bedeutung ist, versuchen Sie, eine Bibliothek zu verwenden, die optionale BLAS / Lapack-Bindungen unterstützt, und verwenden Sie sie am Ende, wenn Sie schnellere Dinge wünschen.


3
  1. Gute Implementierungen der BLAS- und LAPACK-Routinen (vor allem der BLAS-Routinen) können viel schneller sein als einfache Implementierungen derselben Funktionen. Zu effizienten Implementierungen gehören jedoch in der Regel Optimierungen, die für den jeweiligen Computer, auf dem Sie ausgeführt werden, sehr spezifisch sind. Selbst unterschiedliche Modelle von Prozessoren desselben Herstellers (z. B. Intel x86-64-Prozessoren) erfordern häufig sehr unterschiedlichen Code, um eine gute Leistung zu erzielen. Indem Sie einem Softwarepaket optimierte BLAS / LAPACK-Bibliotheken bereitstellen, können Sie den Code in der Regel im Vergleich zu nicht optimierten Routinen beschleunigen. Da viele Gelegenheitsbenutzer möglicherweise nicht über die erforderlichen Kenntnisse verfügen, um optimierte Routinen zu installieren, ist es üblich, auch die Option bereitzustellen, generische nicht optimierte lineare Algebra-Routinen zu verwenden.

  2. UMFPACK ist eine Routinenbibliothek für lineare Algebra auf dünnen Matrizen (Matrizen mit einem hohen Anteil von 0 Einträgen). Mit BLAS / LAPACK können dichte Matrizen (oder dichte Blöcke innerhalb von Matrizen) verarbeitet werden, auf die es stößt.


1

Kurzfassung: Es handelt sich um vorwiegend in Fortran geschriebene Bibliotheken, die für numerische Operationen in vielen Sprachen verwendet werden - aufgrund ihrer Geschwindigkeit und Optimierungen sogar für einige C-Programme. Sie sind auch einige der einzigen Open-Source-Implementierungen vieler Algorithmen :)

Sie müssen keine Bibliotheken verwenden, es sei denn, sie haben Abhängigkeiten. Die meisten davon sind ziemlich unabhängig, und Sie können immer Ihre eigenen mathematischen Funktionen schreiben, z. B. besser vektorisierte für Ihre Architektur


1
Die meisten optimierten BLAS- und LAPACK-Routinen wurden längst nicht mehr in Fortran geschrieben. Die schnellsten BLAS- und LAPACK-Routinen werden im Allgemeinen nicht von netlib heruntergeladen. Die Hersteller der meisten Prozessoren verkaufen oder vertreiben optimierte Versionen von BLAS und LAPACK, die speziell für ihre Chips entwickelt wurden.
Bill Barth

Tut mir leid, ich meine die im Netz verteilten - die allgemeinen; Die chipspezifischen sind natürlich nicht so portabel: Einige Vektortricks von Intel funktionieren auf AMD-Chips nicht so gut, weshalb sie einen Haftungsausschluss für die Bibliothek haben. Und ich bin mir ziemlich sicher, dass diese unter einem anderen Namen umbenannt werden, nein?
Eiyrioü von Kauyf

@ BillBarth BLAS auf jeden Fall, aber sind Sie sicher, dass LAPACK-Routinen auch neu geschrieben werden? Afaik, solange BLAS 3 eine hohe Leistung (oder Multithreading) aufweist, ist alles in Ordnung.
Stali

1
Ich denke an BLAS und LAPACK als die Namen der Funktionen und der Schnittstelle. Es gibt viele verschiedene Implementierungen (ACML, ESSL, MKL, ATLAS usw.).
Bill Barth

1
das sind nur Schnittstellen ... im Gegensatz zu ATLAS sind sie nicht die eigentliche Bibliothek.
Eiyrioü von Kauyf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.