Fortran: BLAS ATLAS
<< zur Fortran-Startseite | |
< pilib | FGSL > |
Allgemeines
[Bearbeiten]Die Basic Linear Algebra Subprograms (BLAS) stellen eine Sammlung von Unterprogrammen für die Vektor- und Matrizenrechnung dar.
- Level 1: Skalar-Vektor-, Vektor-Vektor-Operationen
- Level 2: Matrix-Vektor-Operationen
- Level 3: Matrix-Matrix-Operationen
Die Automatically Tuned Linear Algebra Software (ATLAS) ist ein um einige LAPACK-Funktionen erweitetertes BLAS-Paket und bietet die Möglichkeit, automatisiert eine rechneroptimierte Algebra-Bibliothek zu erzeugen.
Installation von BLAS
[Bearbeiten]BLAS wird in Form von Fortran-Quellcodedateien in einem gepackten tar-Paket zur Verfügung gestellt. Ein Makefile zur Generierung einer Bibliotheksdatei wird nicht mitgeliefert. Eine derartige Bibliotheksdatei kann aber einfach selbst erstellt werden. Eine Anleitung findet sich z.B. auf der gfortran-Dokumentationsseite. Die notwendigen Schritte sind:
- blas.tgz downloaden
- Dieses Paket in ein leeres Verzeichnis entpacken
- Bibliothek erstellen ("shared library" oder "static library"):
- In Form einer "shared library":
gfortran -shared -O2 *.f -o libblas.so -fPIC - In Form einer "static library":
gfortran -O2 -c *.f
ar cr libblas.a *.o
- In Form einer "shared library":
- Die daraus resultierende Bibliotheksdatei in ein geeignetes Verzeichnis verschieben (z.B. /usr/lib/ oder /usr/local/lib/)
Beispiele
[Bearbeiten]Beispiel: Die Level 1-Funktionen sdot und dnrm2
[Bearbeiten]Fortran 90/95-Code (free source form) |
program bsp implicit none real, dimension(3) :: a = (/2.,1.,-1./), b = (/5., -2., 1.5/) real :: c, sdot real(kind=8) :: d, dnrm2 ! *** Skalarprodukt *** ! sdot: s ... REAL, dot ... Skalarprodukt (inneres Produkt) ! 1. Argument ... Dimension des Vektors ! 2. und 4. A. ... die Vektoren ! 3. und 5. A. ... Inkrement (hier 1) c = sdot(3, a, 1, b, 1) write(*,*) c ! Ausgabe: 6.500000 ! *** Norm des Vektors *** ! dnrm2: d ... DOUBLE PRECISION, nrm2 ... (euklidische) Norm ! 1. Argument: Dimension des Vektors ! 2. A.: Vektor ! 3. A.: Inkrement (hier 1) d = dnrm2(3, dble(a), 1) write(*,*) d ! Ausgabe: 2.44948974278318 end program bsp |
Kompilieren und Linken:
gfortran bsp.f95 -lblas
Beispiel: Die Level 2-Subroutine sger
[Bearbeiten]sger steht für:
- s ... REAL
- ge ... general matrix
- r ... rank 1 operation
Mathematisch ist damit folgende Operation gemeint:
wobei A eine mxn-Matrix ist, x und y stellen Vektoren dar.
Das nachfolgende Beispiel führt konkret folgende Rechnung aus:
Fortran 90/95-Code (free source form) |
program bsp implicit none real, dimension(2) :: x = (/2., 1./), y = (/1., 0./) real, dimension(2,2) :: a = reshape ( (/1., 2., -1., 7./), (/2, 2/) ) call sger (2, 2, 1., x, 1, y, 1, a, 2) write(*,*) a ! Ausgabe: 3.000000 3.000000 -1.000000 7.000000 end program bsp |
Weblinks
[Bearbeiten]<< zur Fortran-Startseite | |
< pilib | FGSL > |