LAPACK
# LAPACK

LAPACK (Linear Algebra Package) ist eine Programmbibliothek unter der BSD-Lizenz, die Algorithmen aus dem Bereich der numerischen linearen Algebra enthält. Die Bibliothek wurde ursprünglich in FORTRAN 77 geschrieben, wurde jedoch mit Erscheinen der Version 3.2 auf Fortran 90 umgestellt. Die Bibliothek umfasst effiziente Routinen zur Lösung linearer Gleichungssysteme, linearer Ausgleichsprobleme und von Eigenwertproblemen. Dazu werden die numerischen Verfahren der linearen Algebra benutzt, u. a. QR-Zerlegung, Householdertransformation, Singulärwertzerlegung.

Als Hilfsbibliothek nutzen die Routinen in LAPACK für elementare Operationen der linearen Algebra das Softwarepaket Basic Linear Algebra Subprograms (BLAS). In der Version Lapack95 werden Eigenschaften von Fortran 95 zur Vereinfachung der Schnittstelle genutzt.

LAPACK ist eine Fortentwicklung der älteren Bibliothek LINPACK, die speziell auf die damals üblichen Vektorrechner zugeschnitten war. In LAPACK wurde die elementare lineare Algebra ausgelagert und mit einer definierten Schnittstelle Basic Linear Algebra Subprograms (BLAS) verwendet. In BLAS werden z. B. moderne Cache-Techniken effektiv umgesetzt. Portierungen von BLAS können auf neuere oder speziellere Architekturen zugeschnitten werden, deren Vorteile so sofort in LAPACK nutzbar werden. LAPACK hat das aus den 1960er Jahren stammende Paket EISPACK weitgehend ersetzt.

LAPACK wurde für wichtige Architekturen portiert. Solche Portierungen sind ScaLapack für MIMD-Architekturen und PLapack für abstrakte parallele Architekturen.

LAPACK kann trotz der Programmierung in Fortran aus mehreren Sprachen verwendet werden:

* clapack für C wurde durch automatische Portierung mit f2c erstellt.
* lapacke ist ein Wrapper für C mit Headerfiles.
* LAPACK++ ist ein Wrapper für C++.
* Armadillo ist ein Wrapper für C++.
* JLapack für Java wurde mit f2j erstellt.
* HBlas ist eine Portierung nach Haskell.
* LACAML ist eine Portierung nach OCaml.
* cula ist eine Teilimplementierung in Cuda (Nvidia).
* Gonum ist eine Teilimplementierung in Go (Programmiersprache) (native)

Auf netlib.org steht die Referenzimplementierung von LAPACK und BLAS bereit. Nach dem Download wird mit make zunächst BLAS, dann LAPACK und falls gewünscht, der C-Wrapper lapacke erzeugt. Der C-Wrapper cblas für BLAS muss getrennt installiert werden.

Optimierte Implementierungen werden von Computerherstellern (AMD: AOCL, Cray: libsci, IBM: Essl, Intel: MKL) und OS-Distributoren (Fedora, RedHat, Suse, Mandriva, Debian, Cygwin, Ubuntu, Gentoo, Quantian, OpenBSD, FreeBSD, NetBSD, Dragonfly BSD) angeboten.

