LAPACK

De Wiki de Calcul Québec
Aller à : Navigation, rechercher
Autres langues :anglais 100% • ‎français 100%

Sommaire

Description

LAPACK (Linear Algebra Package) est une bibliothèque mathématique regroupant un ensemble de fonctions pour résoudre des systèmes d'équations linéaires, rechercher la solution de moindre carré d'équations linéaires, résoudre des problèmes aux valeurs propres et problèmes aux valeurs singulières. À cela s'ajoutent plusieurs méthodes de décomposition matricielle : LU, QR, SVD, Cholesky, Schur et Schur généralisée. Ces calculs peuvent s'appliquer à des matrices denses et aux matrices par bandes réelles ou complexes. La version de base de cette bibliothèque est écrite en Fortran 77, cependant, on retrouve une version en Fortran 90 (LAPACK90), en Fortran 95 (LAPACK95), une en C (CLAPACK) et une en C++ (Lapack++).

L'implantation LAPACK de référence est disponible sur Netlib et les routines sont écrites de façon à ce que le calcul soit fait par des appels à la bibliothèque BLAS. La rapidité d'exécution peut donc être grandement accélérée en utilisant une implantation BLAS optimisée, telle que celle incluse dans MKL. Néanmoins, des tierces parties offrent leur propre implantation de LAPACK afin de maximiser la performance du calcul tout en conservant la compatibilité et la précision d'une version de LAPACK particulière.

Implémentations disponibles

Intel Math Kernel Library (MKL)

Math Kernel Library contient une version complète et optimisée de LAPACK.

Exemple

Voici un exemple de calcul de valeurs propres d'une matrice à l'aide de Lapack. L'exemple est écrit en Fortran 90.

Fichier : ex_lapack.f90
!EXEMPLE DE PROGRAMME POUR LA SOLUTION 
!D'UN SYSTÈME D'ÉQUATIONS LINÉAIRES AVEC LAPACK
!CHRISTIAN LANGLOIS, CCS, SEPTEMBRE 2003
PROGRAM LAPACK_SOL
!**********************************************************
 
 
!**********************************************************
!***********      DÉCLARATION DES VARIABLES      **********
!**********************************************************
IMPLICIT NONE
INTEGER :: N=3, NRHS=1, LDA=3, IPIV(3), LDB=3
INTEGER :: LWORK, INFO
REAL(KIND=8) :: RES
REAL(KIND=8),EXTERNAL :: DDOT
REAL(KIND=8) :: A(3,3), B(3,1)
REAL(KIND=8), ALLOCATABLE :: WORK(:)
!**********************************************************
 
 
!**********************************************************
!************       DONNÉES DU PROBLÈME      **************
!**********************************************************
A=0D0
A(1,1)=2D0
A(1,3)=1D0
A(2,2)=1D0
A(3,1)=1D0
A(3,3)=2D0
B(1,1)=1D0
B(2,1)=2D0
B(3,1)=3D0
!**********************************************************
 
 
!**********************************************************
!******    CALCUL ESPACE DE TRAVAIL NÉCESSAIRE     ********
!**********************************************************
ALLOCATE(WORK(5))
LWORK=-1
CALL DSYSV('U',N,NRHS,A,LDA,IPIV,B,LDB,WORK,LWORK,INFO)
LWORK=IDNINT(WORK(1))
DEALLOCATE(WORK)
!**********************************************************
 
 
!**********************************************************
!************      RÉSOLUTION DU SYSTÈME      *************
!**********************************************************
ALLOCATE(WORK(LWORK))
CALL DSYSV('U',N,NRHS,A,LDA,IPIV,B,LDB,WORK,LWORK,INFO)
DEALLOCATE(WORK)
!**********************************************************
 
 
!**********************************************************
!**********       AFFICHAGE DES RÉSULTATS       ***********
!**********************************************************
PRINT*, 'LA SOLUTION DU SYSTÈME EST : ', B
!**********************************************************
RES = DDOT( N, A(1,:), 1, B(1,:), 1 )
PRINT*, 'Produit scalaire = ', RES
 
 
!**********************************************************
!**************      FIN DU PROGRAMME       ***************
!**********************************************************
END PROGRAM LAPACK_SOL
!**********************************************************


Pour compiler l'exemple en utilisant le paquet Math Kernel Library, vous aurez besoin d'une commande de compilation qui ressemble à ce qui suit:

[nom@serveur $] mpif90 ex_lapack.f90 -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm


ATLAS

ATLAS ne fournit qu'une implantation partielle de LAPACK.

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager