La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Structures des projets . et .

Présentations similaires


Présentation au sujet: "Structures des projets . et ."— Transcription de la présentation:

1 Structures des projets . et .
Les brevets logiciels en Europe 26/03/2017 Structures des projets et François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800 François PELLEGRINI -- © Eurolinux

2 Le projet Scotch Débuté en 1992 (thèse de F. Pellegrini)
Appliquer des méthodes de type « diviser pour résoudre » à des problèmes d’algorithmique de graphes utilisés pour la résolution parallèle de grands systèmes linéaires creux : Partitionnement de graphes Placement statique Renumérotation de matrices creuses Algorithmes basés uniquement sur la topologie Étude de versions parallèles de ces algorithmes © 2002 ScAlApplix

3 Le projet PaStiX Débuté en 1997 (thèses de P. Ramet, D. Goudin, P. Hénon) Réalisation d’une chaîne complète de résolution parallèle par méthode directe par blocs de grands systèmes linéaires creux symétriques définis positifs Renumérotation (Scotch) Factorisation symbolique Distribution des blocs (1D et/ou 2D) Factorisation numérique Descente/remontée © 2002 ScAlApplix

4 Structure de graphe

5 Cahier des charges (1) Possibilité de valuer les sommets et les arêtes
Mais pas obligation ! Structures séparées pour les valuations Nécessité de connaître rapidement tous les voisins d’un sommet donné Liste de voisins pour chaque sommet Structure symétrique (graphes symétriques) Facilement modifiable Possibilité d’ajouter, de supprimer des sommets, des arêtes, … i  adj(j)  j  adj(i) i j © 2002 ScAlApplix

6 Stockage des adjacences (1)
Nombre de sommets vertnbr et nombre d’arcs edgenbr Tableaux donnant l’indice de début verttab et l’indice de fin vendtab dans le tableau des extrémités d’arcs edgetab de taille maximale donnée edgemax Plage des numéros de sommets dense Tableau edgetab non nécessairement dense Sommets non nécessairement ordonnés dans edgetab Listes d’adjacence non triées dans edgetab (vendtab[i] – verttab[i]) est le degré du sommet i © 2002 ScAlApplix

7 Stockage des adjacences (2)
On parcourt la structure de la façon suivante : for (vertnum = 0; vertnum < vertnbr; vertnum ++) { for (edgenum = verttab[vertnum]; edgenum < vendtab[vertnum]; edgenum ++) { vertend = edgetab[edgenum]; } 2 3 1 4 verttab edgetab 2 3 . 1 4 10 5 8 vendtab 13 14 4 edgemax edgenbr vertnbr 10 © 2002 ScAlApplix

8 Stockage compact des sommets
Si toutes les adjacences sont stockées de façon dense et ordonnée dans edgetab, on n’a plus besoin d’allouer qu’un seul tableau d’index, de taille (vertnbr + 1) vendtab pointe sur (verttab + 1) 2 3 1 4 verttab 11 1 3 6 9 vendtab edgetab 2 4 10 4 edgemax edgenbr vertnbr © 2002 ScAlApplix

9 Valeur de base des index (1)
Selon que l’on adresse les tableaux à partir de C ou de FORTRAN, les valeurs d’index diffèrent Commencent à zéro en C Commencent à un en FORTRAN Problème d’indexation double, du type : edgetab[verttab[vertnum]] Parcours en C d’un graphe créé en FORTRAN : for (vertnum = 0; vertnum < vertnbr; vertnum ++) { for (edgenum = verttab[vertnum]; // Valide edgenum < vendtab[vertnum]; edgenum ++) { vertend = edgetab[edgenum]; // Invalide ! } © 2002 ScAlApplix

10 Valeur de base des index (2)
La structure de graphe conserve la valeur de base des index de ses tableaux, baseval Les accès basés se font à travers des références basées aux tableaux verttax, vendtax, edgetax verttax vaut (verttab - baseval) vendtax vaut (vendtab - baseval) edgetax vaut (edgetab - baseval) La valeur vertnnd vaut (vertnbr + baseval) © 2002 ScAlApplix

11 Valeur de base des index (3)
for (vertnum = 0; vertnum < vertnbr; vertnum ++) { // Non basé for (edgenum = verttab[vertnum]; edgenum < vendtab[vertnum]; edgenum ++) { // Non basé vertend = edgetax[edgenum]; // Basé for (vertnum = baseval; vertnum < vertnnd; vertnum ++) { // Basé for (edgenum = verttax[vertnum]; edgenum < vendtax[vertnum]; edgenum ++) { // Basé vertend = edgetax[edgenum]; // Basé vendtab 2 3 1 4 vendtax baseval 1 verttax vertnbr 4 1 3 6 9 11 verttab vertnnd 5 edgenbr 10 2 3 3 4 1 1 2 4 3 2 edgemax 10 edgetab © 2002 ScAlApplix

12 Structure de données typedef struct Graph_ {
INT baseval; // Base value for numberings INT vertnbr; // Number of vertices INT edgenbr; // Number of edges (arcs) INT edgemax; // Size of edgetab INT * restrict verttab; // Array of neighbor indexes INT * restrict verttax; // Based access to verttab INT * restrict vendtab; // Array of neighbor indexes INT * restrict vendtax; // Based access to vendtab INT * restrict velotab; // Array of vertex loads INT * restrict velotax; // Based access to velotab INT veloval; // Vertex load if (velotab == NULL) INT * restrict edgetab; // Array of adjacency lists INT * restrict edgetax; // Based access to edgetab INT * restrict edlotab; // Array of edge loads INT * restrict edlotax; // Based access to edlotab INT degrmax; // Maximum degree of graph vertices } Graph; © 2002 ScAlApplix

13 Permutation par blocs

14 Cahier des charges Spécifier de façon compacte une permutation par blocs des sommets d’un graphe, représentant la renumérotation de ses sommets Numérotation dépendant de l’index de base du graphe La permutation inverse est plus intéressante que la permutation directe Zone continue d’indices pour tout sous-graphe à renuméroter Favorise donc la localité des données et le cache Permet d’exprimer les blocs de la renumérotation comme des plages continues d’indices © 2002 ScAlApplix

15 Permutation par blocs La permutation inverse est contenue dans un tableau basé, peritax On peut en déduire la permutation directe, permtax Les rangnbr plages de numérotation sont stockées au moyen du tableau compact rangtax, de taille (rangnbr + 1), contenant les indices de début de chaque plage, et terminé par vertnnd (rangtax[i+1] – rangtax[i]) est la taille de la plage i © 2002 ScAlApplix

16 Structure de données typedef struct Order_ {
INT baseval; // Base value for numberings INT rangnbr; // Number of permuted vertex ranges INT * restrict rangtax; // Array of permuted vertex ranges INT * restrict peritax; // Inverse permutation INT * restrict permtax; // Direct permutation } Order; © 2002 ScAlApplix

17 Matrice symétrique factorisée symboliquement par blocs

18 Cahier des charges Représenter de façon compacte une matrice symétrique factorisée symboliquement par blocs Numérotation dépendant de l’index de base du graphe Structure servant de support à la structure distribuée de matrice factorisée numériquement par blocs © 2002 ScAlApplix

19 Blocs colonnes et blocs (1)
Les plages de la renumérotation définissent des blocs colonnes cblknbr est le nombre de blocs colonnes Stockage compact dans un tableau unique (cblktab) de taille (cblknbr + 1) Les bornes de la colonne sont (fcolnum, lcolnum) (cblktax[i+1].bloknum – cblktax[i].bloknum) est le nombre de blocs contenus dans le bloc colonne i © 2002 ScAlApplix

20 Blocs colonnes et blocs (2)
Dans chaque bloc colonne, les blocs sont définis par leurs indices de ligne (frownum, lrownum) et le numéro global du bloc colonne en regard (cblknum) bloknbr est le nombre de blocs colonnes Stockage compact dans un tableau unique (bloktab) de taille bloknbr © 2002 ScAlApplix

21 Structure de données typedef struct SymbolCblk_ {
INT fcolnum; // First column index INT lcolnum; // Last column index (inclusive) INT bloknum; // First block in column (diag.) } SymbolCblk; typedef struct SymbolBlok_ { INT frownum; // First row index INT lrownum; // Last row index (inclusive) INT cblknum; // Facing column block INT levfval; // Level-of-fill value } SymbolBlok; typedef struct SymbolMatrix_ { INT baseval; // Base value for numberings INT cblknbr; // Number of column blocks INT bloknbr; // Number of blocks SymbolCblk * restrict cblktab; // Array of column blocks SymbolBlok * restrict bloktab; // Array of blocks INT nodenbr; // Number of nodes in matrix } SymbolMatrix; © 2002 ScAlApplix


Télécharger ppt "Structures des projets . et ."

Présentations similaires


Annonces Google