Zum Inhalt springen

Fortran: BLAS ATLAS

Aus Wikibooks
<< zur Fortran-Startseite
< pilib FGSL >




Wikipedia hat einen Artikel zum Thema:


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:

  1. blas.tgz downloaden
  2. Dieses Paket in ein leeres Verzeichnis entpacken
  3. Bibliothek erstellen ("shared library" oder "static library"):
    1. In Form einer "shared library":
      gfortran -shared -O2 *.f -o libblas.so -fPIC 
    2. In Form einer "static library":
      gfortran -O2 -c *.f 
      ar cr libblas.a *.o 
  4. 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 >