BLAS (Basic Linear Algebra Subprograms)

Fiche logiciel validé
  • Création ou MAJ importante : 11/05/10
  • Correction mineure : 11/05/10
Mots-clés

BLAS (Basic Linear Algebra Subprograms) : bibliothèque d'algèbre linéaire

Description
Fonctionnalités générales

BLAS est une bibliothèque d'algèbre linéaire qui permet de réaliser des opérations élémentaires entre : les scalaires, les vecteurs, les matrices. Diffusée en 1979, cette librairie a, depuis, fait l'objet de nombreuses optimisations par la plupart des constructeurs. De ce fait, BLAS est devenu un standard en calcul haute performance et est utilisée dans de nombreuses librairies de plus haut niveau (LAPACK, ScaLAPACK, ...) . On peut également citer ATLAS qui permet d'obtenir une version optimiser de BLAS sans se soucier de l'architecture de la machine.

Pour faciliter son intégration et son utilisation, les concepteurs ont partitionné la librairie en niveaux :

niveau 1 : opérations sur des vecteurs

  • addition de 2 vecteurs,
  • produit scalaire,
  • calcul de norme,
  • ...

niveau 2 : opérations matrice-vecteur

  • addition d'un produit matrice-vecteur et d'un vecteur,
  • résolution de systèmes matrice-vecteur où la matrice est triangulaire supérieure ou inférieure,
  •  ...

niveau 3 : opérations matrice-matrice

  • addition d'un produit matrice-matrice et d'une matrice,
  • résolution de systèmes matrice-matrice où  la première matrice est triangulaire supérieure ou inférieure,
  • ...

Référence des fonctions disponibles : http://www.netlib.org/blas/blasqr.pdf

Différents types de matrice y sont implémentés: format générale, symétrique, hermitienne, triangulaire, ...

Le stockage des matrices est un stockage de type matrice pleine. On peut néanmoins obtenir une version de BLAS pour des matrices creuses (appelée Sparse BLAS) en utilisant par exemple ACML ou Intel MKL.

Exemple d'opération simple avec CBLAS, l'interface langage C de BLAS

  #include stdio.h
  #include gsl/gsl_cblas.h
    
     int
     main (void)
     {
       int lda = 3;
    
       float A[] = { 0.11, 0.12, 0.13,
                     0.21, 0.22, 0.23 };    
       int ldb = 2;      
       float B[] = { 1011, 1012,
                     1021, 1022,
                     1031, 1032 };    
       int ldc = 2;    
       float C[] = { 0.00, 0.00,
                     0.00, 0.00 };
    
       /* Compute C = A B */
       /* Prefix : s=real, d=double, c=complex, z=complex*16 */
       cblas_sgemm (CblasRowMajor,
                    CblasNoTrans, CblasNoTrans, 2, 2, 3,
                    1.0, A, lda, B, ldb, 0.0, C, ldc);
       printf ("[ %g, %g\n", C[0], C[1]);
       printf ("  %g, %g ]\n", C[2], C[3]);
       return 0; 
     }

La compilation s'effectue de la façon suivante :

     $ gcc -Wall demo.c -lgslcblas

et les sorties de l'exécution donnent :

     $ ./a.out
     [ 367.76, 368.12
       674.06, 674.72 ]

Autres fonctionnalités

Exemple d'opération simple avec CBLAS, l'interface langage C de BLAS :

  #include stdio.h
  #include gsl/gsl_cblas.h
    
     int
     main (void)
     {
       int lda = 3;
    
       float A[] = { 0.11, 0.12, 0.13,
                     0.21, 0.22, 0.23 };    
       int ldb = 2;      
       float B[] = { 1011, 1012,
                     1021, 1022,
                     1031, 1032 };    
       int ldc = 2;    
       float C[] = { 0.00, 0.00,
                     0.00, 0.00 };
    
       /* Compute C = A B /
       /
Prefix : s=real, d=double, c=complex, z=complex*16 */
       cblas_sgemm (CblasRowMajor,
                    CblasNoTrans, CblasNoTrans, 2, 2, 3,
                    1.0, A, lda, B, ldb, 0.0, C, ldc);
       printf ("[ %g, %g\n", C[0], C[1]);
       printf ("  %g, %g ]\n", C[2], C[3]);
       return 0; 
     }

La compilation s'effectue de la façon suivante :

     $ gcc -Wall demo.c -lgslcblas

et les sorties de l'exécution donnent :

     $ ./a.out
     [ 367.76, 368.12
       674.06, 674.72 ]

Interopérabilité

BLAS est disponible en langage C (CBLAS) et en Fortran 77.

Contexte d'utilisation dans mon laboratoire/service

BLAS a été utilisée au LAAS/CNRS dans le projet BINAUR pour "certifier" les résultats de calcul matriciel en dehors de matlab.

Environnement du logiciel
Distributions dans lesquelles ce logiciel est intégré

Cette librairie est intégrée dans la plupart des distributions Linux (Debian, Ubuntu, Mandriva,...).

Plates-formes

BLAS est portée sur les plates-formes unix suivantes : ALPHA, HPPA, LINUX, SGI64, SUN4, SUN4SOL2, comme sur Mac OS X et windows (via cygwin).

Logiciels connexes
Environnement de développement
Eléments de pérennité

BLAS est intégrée dans de nombreuses bibliothèques et librairies de haut niveau.

Références d'utilisateurs institutionnels

LAAS/CNRS et de nombreux laboratoires de recherche.

Environnement utilisateur
Liste de diffusion ou de discussion, support et forums
Documentation utilisateur
Divers (astuces, actualités, sécurité)

BLAS est une bibliothèque qui n'évolue pas constamment. La dernière proposition d'amélioration est parue en 2002 avec l'ajout de nouvelles fonctionnalités : http://www.netlib.org/blas/faq.html#3