• Aucun résultat trouvé

Impl´ementation efficace de CADNA dans les routines BLACS

B.1 BLACS : Basic Linear Algebra Communication Subprograms

BLACS (Basic Linear Algebra Communication Subprograms)61 [Dongarra et Whaley, 1997] est une

bibliothèque de communication écrite en C permettant, sur une grille 2D prédéfinie de processus, d’échanger des blocs de matrices (rectangulaires ou triangulaires) entre ces processus, de les diffuser globalement et de calculer sur eux des réductions. Les routines BLACS, offrent pratiquement les mêmes fonctionnalités qu’offre le standard MPI. Elles permettent de faire des communications point à point, les communications collectives et des opérations de réductions (min, max et la somme).

Il existe quatre différentes implémentations des BLACS, chacune de ses implémentations se basant

sur un standard de communication (MPI , MPL62, PVM63). Par contre, la syntaxe d’appel au BLACS

reste identique d’un système à l’autre, d’où son intérêt. Bien qu’écrite en C, la bibliothèque dispose aussi d’une interface Fortran.

Contrairement à la majorité des standards de communication, les BLACS fonctionnent avec des tableaux 2D (en algèbre linéaire, les matrices sont en réalité en 2D). Il définit deux types de matrices qui sont stockés en mémoire en «Column-major».

– Matrice rectangulaire définie par M (nombre de lignes) et N (nombre de colonnes) et LDA (la distance, en mémoire, entre deux éléments successifs d’une ligne de la matrice).

– Matrice trapézoïdale définie par M,N,LDA et deux autres paramètres : UPLO pour indiquer si la matrice est montante ou descendante et DIAG pour indiquer si la matrice est diagonale.

61. http://www.netlib.org/blacs/ 62. IBM Message Passing Layer

63. PVM (Parallel Virtual Machine) est une bibliothèque de communication (langages C et Fortran) pour ma-chines parallèles et réseau d’ordinateurs (locaux ou distants, éventuellement hétérogènes). Il permet à un réseau d’ordinateurs d’apparaître comme un seul ordinateur.

Annexe B. Implémentation efficace de CADNA dans les routines BLACS

Figure B.1 – Organisation des bibliothèques de base d’algèbre linéaire

Les routines BLACS ont été écrit principalement pour faciliter l’implémentation des versions

paral-lèles des bibliothèques d’algèbre linéaire (voirfigure B.1). Ainsi, la bibliothèque PBLAS (Parallel BLAS)

est basée sur des noyaux BLAS (Basic Linear Algebra Subprograms, voir chapitre 5) et des routines

de communication BLACS. ScaLAPACK (Scalable Linear Algebra PACKage) réutilise PBLAS et implé-mente les fonctionnalités avancées de LAPACK (Linear Algebra PACKage). On peut trouver un large

aperçu de ces bibliothèques à l’adressehttp://www.netlib.org/.

La bibliothèque est composée essentiellement de deux sortes de sous-programmes des routines pour l’initialisation et la terminaison de l’environnement BLACS et des routines pour l’échange de données.

1. Initialisation et terminaison :

– BLACS_PINFO( ) : initialise l’environnement BLACS

– BLACS_GET( ) : définit un contexte unique de communication – BLACS_GRIDINIT( ) : initialise une grille logique 2D de processus – BLACS_GRIDEXIT( ) : libère la grille logique de processus

– BLACS_EXIT( ) : libère toutes les grilles de processus

Une fois la grille définie, les communications se font dans ce contexte en utilisant les primitives BLACS de communication.

2. Primitives de communication : Ces routines suivent une convention pour leurs noms :

– communication point à point et collective (broadcast) : vXXYY2D : la lettre «v» indique le type de donnée, «XX» la forme de la matrice, et les lettres «YY» pour indiquer le type de communi-cation (voir TableauxB.1,B.2,B.3).

– routines de réductions : vGZZZ2D , la lettre «v» pour indiquer le type de donnée et «ZZZ» l’opération (AMX pour max, AMN pour le min et SUM pour la somme).

B.1. BLACS : Basic Linear Algebra Communication Subprograms

Tableau B.1 – Types de données

v signification I entier (integer) S réel simple précision D réel double précision C complexe simple précision Z complexe double précision

Tableau B.2 – Types de matrices

XX signification

GE matrice rectangulaire TR matrice triangulaire

Tableau B.3 – Types d’envoi/réception

YY signification SD envoi point à point RV réception point à point BS envoi collectif

BR réception collective

Tableau B.4 – Exemples de routines BLACS

IGESD2D( ) envoi point à point de matrice rectangulaire d’entier

DGERV2D( ) réception point à point de matrice rectangulaire de réel en double précision ZTRBS2D( ) envoi broadcast de matrice triangulaire de complexe double précision ZTRBR2D( ) réception broadcast de matrice triangulaire de complexe double précision

Annexe B. Implémentation efficace de CADNA dans les routines BLACS

B.2 Comment associer les BLACS et CADNA ?

Pour associer CADNA aux BLACS, il faut implémenter des routines pour pouvoir échanger des matrices de types double_st ou single_st. Dans cette optique, nous nous sommes alors intéressé au fonc-tionnement interne des BLACS.

B.2.1 Comment fonctionnent les routines BLACS ?

Pour chaque type de donnée (integer, double, float, complex) et suivant le type de matrice à transférer il existe une routine spécifique d’envoi ou de réception. Chaque routine suit le principe suivant :

1. création du type dérivé de la matrice (à la manière MPI)

2. soit on met la matrice dans un buffer/soit on la met dans un pack 3. envoi/réception du buffer ou du pack

B.2.2 Les types stochastiques et les BLACS ?

Pour nos routines CADNA_BLACS, nous avons choisi de suivre le même principe et d’utiliser les types dérivés et les opérateurs de l’extension CADNA_MPI. Il aurait fallu alors partir des codes source des BLACS et travailler sur le point 1. Cependant, nous nous sommes confronté à des soucis de compa-tibilités notamment pour le Fortran. CADNA étant écrit en C++ et Fortran 90, de nombreux problèmes se sont posés au niveau des éditions de lien.

Finalement, nous avons utilisé des void* pour le type du buffer d’envoi et les paramètres MPI_Datatype et MPI_Op dans les prototypes de nos fonctions. Cette petite astuce, nous permet d’avoir des routines que nous pouvons qualifier de génériques. Il faut à chaque envoi ou réception, signifier le type dérivé sur lequel on travaille. Dans le cas d’une routine de réduction, il faut signifier aussi l’opération de réduction qu’on souhaite faire. Nos routines ont des prototypes comme ci-dessous :

Routine d’envoi : "sc" pour les types stochastiques

v o i d C s c g e s d 2 d ( int ctxt , int m , int n , v o i d * A , int lda , M P I _ D a t a t y p e type , int ←-rdest , int c d e s t )

Routine de réception :

v o i d C s c t r s d 2 d ( int ctxt , c h a r * uplo , c h a r * diag , int m , int n , v o i d * A , int ←-lda , M P I _ D a t a t y p e type , int rdest , int c d e s t )

Routine de réduction :

v o i d C s c g o p 2 d ( int ConTxt , c h a r * scope , c h a r * top , int m , int n , v o i d * A , v o i d * B , int lda , M P I _ D a t a t y p e type , M P I _ O p op , int rdest , int ←-c d e s t ) ;

CADNA_BLACS est encore en phase de développement. Les principales fonctions de base fonc-tionnent correctement mais il subsiste quelques petits soucis au niveau de l’interface Fortran, notam-ment pour l’implénotam-mentation des opérations MAX_LOC et MIN_LOC.

Annexe

C

Equations d’hydrodynamique `a surface