# Basic Linear Algebra Subprograms

Basic Linear Algebra Subprograms (kurz: BLAS) bezeichnet eine Programmbibliothek, die elementare Operationen der linearen Algebra wie Vektor- und Matrixmultiplikationen bereitstellt. Es gibt eine Vielzahl von Implementierungen in verschiedenen Sprachen bzw. für verschiedene Architekturen und Plattformen. Der Vorteil von BLAS liegt nicht nur in der Wiederverwendbarkeit und der Arbeitserleichterung für den Programmierer, sondern auch in der Möglichkeit für Hardwarehersteller, für diese häufig gebrauchten Subroutinen hochoptimierte, zum Teil in Assembler realisierte Implementierungen bereitzustellen. Daher finden BLAS vor allem im Supercomputing-Bereich breite Verwendung.
Die Definition der Schnittstelle zu BLAS ist ein De-facto-Standard.

## Funktionalität

Es werden folgende Datentypen unterstützt: single (32 Bit), double (64 Bit), complex (2 × 32 Bit), doublecomplex (2 × 64 Bit).
Die Funktionalität von BLAS wird in drei Stufen (Level) unterteilt:

### Level 1

Level 1 enthält Vektor-Rechenoperationen der Form
    $\mathbf {y} \leftarrow \alpha \mathbf {x} +\mathbf {y}$
sowie unter anderem das Skalarprodukt und Vektornormen.

### Level 2

Level 2 enthält Vektor-Matrix-Rechenoperationen der Form
    $\mathbf {y} \leftarrow \alpha A\mathbf {x} +\beta \mathbf {y}$
sowie unter anderem das Lösen von linearen Gleichungssystemen $T\mathbf {x} =\mathbf {y}$ mit Matrix $T$ in Dreiecksform.

### Level 3

Level 3 enthält Matrix-Rechenoperationen der Form
    $C\leftarrow \alpha AB+\beta C\!$
sowie unter anderem das Lösen von $B\leftarrow \alpha T^{-1}B$ für Matrix $T$ in Dreiecksform. Dieser Level enthält die oft benötigte Matrixmultiplikation.

## Implementierungen
### refblas

    Offizielle Referenzimplementierung von Netlib. C- und Fortran-77-Versionen sind verfügbar.

### ACML

    AMD Core Math Library, für AMD-Athlon- und -Opteron-CPUs unter Linux und Windows.

### ATLAS

    Automatically Tuned Linear Algebra Software, ein Open-Source-Implementierung der BLAS-APIs für C und Fortran 77.

### ESSL

    IBMs Engineering and Scientific Subroutine Library, für die PowerPC Architektur unter AIX und Linux.

### Goto BLAS

    BLAS-Implementierung von Kazushige Goto.

### OpenBLAS

    Weiterentwicklung von Goto BLAS für moderne Prozessoren.

### HP MLIB

    HPs Math library, für die Architekturen Itanium, PA-RISC, x86 und Opteron unter HP-UX und Linux.

### IMKL

    Intel Math Kernel Library (BLAS, LAPACK, ScaLAPACK, Sparse Solvers, FFT, Vector Math), für Intel-Prozessoren unter Linux, macOS und Windows.

### LAMA

    Die Library for Accelerated Math Applications (LAMA) ist eine, in C++ geschriebene, Template-Bibliothek zum Schreiben numerischer Löser für verschiedene Hardware (z. B. GPUs mittels CUDA oder OpenCL) in Systemen mit verteiltem Speicher – sie versteckt die hardwarespezifische Programmierung vor dem Anwendungsentwickler.

### MTL4

    Die Matrix Template Library Version 4 ist eine generische C++-Template-Bibliothek für schwach und voll besetzte BLAS-Funktionalität. MTL4 bietet ein intuitives Interface (ähnlich Matlab) und dank Generischer Programmierung eine breite Anwendbarkeit.

### uBLAS

    Eine generische C++-Klassenbibliothek, welche BLAS-Funktionalität bereitstellt, Teil der Boost-Bibliothek.

### CUBLAS

    Die Nvidia-Implementierung von BLAS für die CUDA-Technologie.

### clBLAS

    Eine Implementierung von BLAS für OpenCL.

### AmdBLAS

    Die AMD-Implementierung von BLAS für das ATI-Stream-SDK.

### Armadillo

    Die Armadillo Template-Bibliothek ist ein Wrapper für C++.

### UTL_NLA

    Subset der Implementierung von BLAS und LAPACK als PL/SQL Package in der Oracle Datenbank ab Version 9i