Bibliothèques Scientifiques
Bibliothèques scientifiques optimisées installées sur le cluster IBM
Introduction
Les bibliothèques scientifiques sont des ensembles de sous-programmes testés, validés, optimisés. Utiliser des librairies scientifiques permet de se consacrer uniquement aux nouveaux développements et donc de ne pas devoir réinventer la roue à chaque fois. Elles ont plusieurs qualités qui les rendent très intéressantes :- elles sont portables puisqu'indépendantes de l'architecture des machines;
- elles supportent différents types de donnée : réel ou complexe, simple ou double précision;
- elles prennent en compte différents types de stockage : matrice bande, symétrique, hermitienne;
Par contre, les bibliothèques conçues par les constructeurs présentent des avantages similaires mais ne sont pas portables puisque dépendantes de l'architecture, le cas typique est les transformées de Fourier rapides ou FFT. Voir les conseils pratiques (rubrique bibliothèques scientifiques).
Les bibliothèques suivantes sont disponibles sur les noeuds de calcul :
- PESSL (Parallel Engineering and Scientific Subroutine Library) : c'est une bibliothèque de routines mathématiques scalables qui s'exécutent en mode parallèle. Elle supporte le modèle de programmation SPMD (Single Program, Multiple Data) basé sur le passage de messages avec MPI. La version SMP permet d'exécuter des applications mono ou multithreadées et elle fonctionne en environnement 32 bits et 64 bits. Attention elle n'est pas thread safe ;
- ESSL (Engineering and Scientific Subroutine Library) : c'est une bibliothèque de routines performantes. La version SMP fournit des versions thread safe des routines de ESSL. Un certain nombre d'entre-elles ont des versions multithreadées qui supportent donc la parallélisation à mémoire partagée. ;
- MASS (Mathematical Acceleration SubSystem) : versions optimisées des fonctions trigonométriques, logarithmiques, exponentielles, etc ... pour traiter une donnée isolée ou un vecteur. ;
ESSL (Engineering and Scientific Subroutine Library)
La page d'accueil de la bibliothèque ESSL est ici.Elle propose un ensemble de documents aux formats pdf et html.
Ce très gros document (format pdf) est le véritable guide de l'utilisateur de la bibliothèque ESSL.
Les routines de cette bibliothèque couvrent un champ d'applications assez vaste :
- algèbre linéaire : Il s'agit de routines faisant des opérations sur des vecteurs, combinaisons scalaires de vecteurs et des opérations matrice-vecteurs. Cela concerne aussi les stockages creux (stockage limité aux éléments non nuls des tableaux). Ces sous-programmes représentent un sous-ensemble des routines BLAS niveau 1 et niveau 2.
- calcul matriciel : cela inclut les routines BLAS niveau 3 ainsi que les opérations usuelles comme l'addition, la soustraction, la multiplication et la transposée.
- résolution de système linéaires : il s'agit de routines pour les systèmes à matrice pleine, bande, creuse et les problèmes aux moindres carrés (factorisation QR). Elles s'appliquent dans le cas de matrices réelles ou complexes quelconques, matrices symétriques, définies positive, tridiagonales, hermitiennes, etc ... Il y a des méthodes directes ou itératives. Ces sous-programmes représentent un sous-ensemble des routines BLAS niveau2 et niveau 3 ainsi que des routines LAPACK.
- recherche de valeurs propres : ces routines permettent de résoudre des systèmes à valeurs propres comme Az= wz.
- transformées de Fourier, convolutions, traitement du signal : ces routines effectuent les transformations de Fourier en 1D, 2D ou 3D, le calcul de corrélation et de convolution ainsi que certains calculs issus du traitement du signal.
- tris et recherche d'éléments : les recherches sont possibles pour des données de type entier, réel simple et réel double précision avec ou sans index.
- interpolation : il s'agit d'interpolation polynomiale, et d'interpolation par splines cubiques en une et deux dimensions d'espace.
- quadrature numérique : ces routines permettent d'intégrer des fonctions sur des intervalles, finis, semi-infinis ou infinis en utilisant des méthodes de quadrature de type Gauss. La fonction peut être tabulée ou fournie directement.
- génération de nombres aléatoires : il s'agit de nombres pseudo-aléatoires de loi uniforme et de loi normale.
L'utilisation se fait en ajoutant l'option -lessl à l'édition des liens.
PESSL (Parallel Engineering and Scientific Subroutine Library)
La page d'accueil de la bibliothèque PESSL est ici.Elle propose un ensemble de documents aux formats pdf et html.
Ce très gros document (format pdf) est le véritable guide de l'utilisateur de la bibliothèque P-ESSL.
Les routines de cette bibliothèque couvrent un champ d'applications assez vaste :
- PBLAS niveau 2 : cela inclut un sous-ensemble des versions parallèles pour mémoire distribuée de BLAS niveau 2.
- PBLAS niveau 3 : cela inclut un sous-ensemble des versions parallèles pour mémoire distribuée de BLAS niveau 3.
- résolution de système linéaires : il s'agit de routines pour les systèmes à matrice pleine, bande, creuse et les problèmes aux moindres carrés. Elles s'appliquent dans le cas de matrices réelles quelconques, matrices symétriques et définies positive, tridiagonales, etc ... Il y a des méthodes directes ou itératives. Ces sous-programmes contiennent un sous-ensemble de routines ScaLAPACK.
- recherche de valeurs propres et valeurs singulières : ces routines permettent de résoudre des systèmes à valeurs propres comme Az= wz. Ces sous-programmes contiennent un sous-ensemble de routines ScaLAPACK.
- transformées de Fourier : ces routines effectuent les transformations de Fourier en 2D ou 3D.
- génération de nombres aléatoires : il s'agit de nombres pseudo-aléatoires de loi uniforme.
L'utilisation se fait en ajoutant l'option -lpessl à l'édition des liens.
MASS (Mathematical Acceleration SubSystem)
La page d'accueil de la bibliothèque MASS est ici, il s'agit de la bibliothèque mathématique optimisée d'IBM.Comme les fonctions de cette librairie sont des fonctions mathématiques standard, la documentation concerne essentiellement les performances obtenues par rapport à la bibliothèque mathématique standard.
Pour des appels isolés, le gain peut aller jusqu'à un facteur 6.
Des appels sur des vecteurs de données à traiter fournissent des gains (par évaluation) jusqu'à un facteur 10.
L'utilisation se fait en ajoutant les options -lmass et -lmassv à l'édition des liens.
BLAS (Basic Linear Algebra Subprograms)
blas est une librairie de routines qui effectuent des opérations de base impliquant des matrices et des vecteurs. Le site netlib pour la bibliothèque blas est ici. Cette bibliothèque sert de support à d'autres librairies scientifiques comme lapack.L'idée de base de ces routines est que chaque constructeur les écrive en langage machine pour qu'elles soient le plus optimisé possible mais avec une interface générique quelle que soit l'architecture de travail. L'implantation est optimisée au niveau des caches de la mémoire.
Il existe trois niveaux dans blas :
- Le niveau 1, package initial, effectue des opérations de bas niveau comme le produit scalaire et la combinaison linéaire de vecteurs, soit des coûts en O(n) opérations flottantes, pour n la dimension des vecteurs impliqués.
- Le niveau 2 comprend les opérations courantes sur les matrice/vecteur qui apparaissent dans les algorithmes d'algèbre linéaire, soit des coûts en O(n^2) opérations flottantes.
- Le niveau 3 correspond aux opérations matrice/matrice, soit des coûts en O(n^3) opérations flottantes avec un cout en O(n^2) pour les mouvements de données. Ces routines permettent une réutilisation efficace des données résidant dans les caches. De plus les matrices peuvent être partitionnées en blocs et les opérations sur des blocs distincts peuvent être effectuées en parallèle.
Les routines des niveaux 1, 2 et 3 de blas se retrouvent dans la bibliothèque ESSL. Un résumé des routines de blas, au format postscript, est disponible ici
Exemple de programme utilisant BLAS en Fortran
PBLAS
pblas, Parallel Basic Linear Algebra Subprograms, est la version parallèle de blas pour machine à mémoire distribuée. Cette librairie permet de paralléliser une application employant blas.Certaines des routines des niveaux 2 et 3 de pblas se retrouvent dans la bibliothèque PESSL. Un résumé des routines de pblas, au format postscript, est disponible ici. Un exemple d'utilisation est proposé dans la partie consacrée à ScaLAPACK.
LAPACK
lapack, Linear Algebra PACKage, est une bibliothèque de routines Fortran 77 pour résoudre des problèmes d'algèbre linéaire : résolution de systèmes linéaires,problèmes de moindres carrés, problèmes aux valeurs propres, factorisations de matrice, .... Le site netlib pour lapack est ici.lapack (basée sur blas niveau 3) est le successeur des librairies linpack et eispack (basées sur blas niveau 1), notamment pour les architectures vectorielles et parallèles à mémoire partagée sur lesquelles linpack et eispack étaient peu efficaces.
linpack est une collection de routines Fortran qui permettent d'analyser et de résoudre des systèmes linéaires (matrice générale, bande, symétrique non définie, triangulaire, ...) et des problèmes aux moindres carrés linéaires (factorisation QR, décomposition en valeurs singulières de matrices rectangulaires appliquées aux problèmes aux moindres carrés).
eispack est un ensemble de de routines Fortran qui calculent les valeurs et vecteurs propres pour différentes classes de matrice : matrice complexe générale, complexe hermitienne, réelle générale, réelle symétrique bande, réelle symétrique définie positive, ... Elle inclut la possiblité de résoudre un problème de type moindres carrés en employant la décomposition en valeurs singulières.
lapack améliore ces deux librairies dans quatre directions : vitesse, précision, fiabilité et fonctionnalité. Malheureusement cette bibliothèque ne fait pas partie dans son intégralité de la librairie mathématique IBM ESSL. Elle est donc installée à part avec une interface spéciale qui permet d'appeler ESSL pour les routines lapack qui s'y trouvent.
L'utilisation de routines de la bibliothèque lapack est simple, il suffit d'ajouter l'option -llapack à l'édition des liens.
Exemple de programme utilisant LAPACK en Fortran
SCALAPACK
scalapack, SCAlable Linear Algebra PACKage, est la version scalable de routines issues de la bibliothèque lapack pour architecture à mémoire distribuée. Comme pour lapack, les routines sont construites à l'aide d'algorithmes privilégiant le partitionnement des données par blocs pour minimiser les mouvements de données entre les différents niveaux de la mémoire (registres, caches primaire et secondaire et mémoire physique). Le site netlib pour scalapack est ici.Cette bibliothèque parallèle s'appuye sur :
- pblas (Parallel Basic Linear Algebra Subprograms) : version parallélisée de blas pour les machines à mémoire distribuée ;
- blacs (Basic Linear Algebra Communication Subprograms) : bibliothèque de communications (par passage de messages), basée sur MPI. Elle permet, après avoir défini une grille de processus, d'échanger des blocs de matrices. Un descriptif des différentes routines, au format postscript, est disponible ici.
L'utilisation de scalapack se fait dans différents domaines de l'algèbre linéaire, notamment pour :
- recherche de valeurs propres,
- factorisations LU, Cholesky et QR.
Le guide de l'utilisateur de ScaLAPACK, en ligne sur le serveur de la netlib, fournit toutes les informations pour l'emploi de scalapack dans un programme.
FFT
La bibliothèque de FFT (incluse dans ESSL) permet de réaliser les opérations suivantes :- transformées de Fourier 1D, 2D, 3D complexe/complexe, complexe/réel et réel/complexe,
- produit de convolution et corrélation.
Pour obtenir de bonnes performances avec ces routines, il est nécessaire de respecter un certain nombre de règles sur la structures des données. Parfois, elles sont obligatoires; en voici quelques-unes :
- tous les entiers ne sont pas valables comme longueur de transformations. Il faut que cette longueur s'écrive comme un produit de facteurs premiers respectant les contraintes de la décomposition suivante :
La longueur optimale est basée sur des puissances de 2 uniquement, voire même des puissances de 8 pour une meilleure utilisation des caches des processeurs ;n = (2^h)(3^i)(5^j)(7^k)(11^m) pour n <= 37748736 où h = 1, 2, ..., 25 i = 0, 1, 2 j, k, m = 0, 1 - un tableau auxiliaire de travail est nécessaire pour stocker les trigs (exponentielles complexes), la décomposition en facteurs premiers de la longueur des transformations. L'initialisation est faite lors d'un appel préalable aux calculs ;
- des tableaux auxiliaires de travail sont nécessaires comme zone de stockage temporaire durant les calculs. Il faut un tableau pour chaque sens de la transformation. L'initialisation est faite lors d'un appel préalable aux calculs ;
- L'accès aux données (la manière dont elles sont stockées) est un facteur majeur pour les performances. Il est important que les données soient stockées de manière contigüe en mémoire : le stride (pas entre deux éléments consécutifs) doit être égal à 1.
Exemple d'utilisation des FFT 1D et 2D réel/complexe et complexe/complexe
Retour au début de la page.