21
Structures des projets Structures des projets . . et . et . François François PELLEGRINI PELLEGRINI INRIA Futurs & LaBRI, UMR INRIA Futurs & LaBRI, UMR CNRS 5800 CNRS 5800

Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

Embed Size (px)

Citation preview

Page 1: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

Structures des projets . Structures des projets . et .et .

FrançoisFrançois PELLEGRINIPELLEGRINI

INRIA Futurs & LaBRI, UMR CNRS INRIA Futurs & LaBRI, UMR CNRS 58005800

Page 2: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

2© 2002 ScAlApplix

Le projet ScotchLe projet Scotch

Débuté en 1992 (thèse de F. Pellegrini)Débuté en 1992 (thèse de F. Pellegrini) Appliquer des méthodes de type « diviser pour Appliquer des méthodes de type « diviser pour

résoudre » à des problèmes d’algorithmique de résoudre » à des problèmes d’algorithmique de graphes utilisés pour la résolution parallèle de graphes utilisés pour la résolution parallèle de grands systèmes linéaires creux :grands systèmes linéaires creux : Partitionnement de graphesPartitionnement de graphes Placement statiquePlacement statique Renumérotation de matrices creusesRenumérotation de matrices creuses

Algorithmes basés uniquement sur la topologieAlgorithmes basés uniquement sur la topologie Étude de versions parallèles de ces algorithmesÉtude de versions parallèles de ces algorithmes

Page 3: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

3© 2002 ScAlApplix

Le projet PaStiXLe projet PaStiX

Débuté en 1997 (thèses de P. Ramet, D. Débuté en 1997 (thèses de P. Ramet, D. Goudin, P. Hénon)Goudin, P. Hénon)

Réalisation d’une chaîne complète de Réalisation d’une chaîne complète de résolution parallèle par méthode directe par résolution parallèle par méthode directe par blocs de grands systèmes linéaires creux blocs de grands systèmes linéaires creux symétriques définis positifssymétriques définis positifs Renumérotation (Scotch)Renumérotation (Scotch) Factorisation symboliqueFactorisation symbolique Distribution des blocs (1D et/ou 2D)Distribution des blocs (1D et/ou 2D) Factorisation numériqueFactorisation numérique Descente/remontéeDescente/remontée

Page 4: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

Structure de grapheStructure de graphe

Page 5: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

5© 2002 ScAlApplix

Cahier des charges (1)Cahier des charges (1)

Possibilité de valuer les sommets et les arêtesPossibilité de valuer les sommets et les arêtes Mais pas obligation !Mais pas obligation ! Structures séparées pour les valuationsStructures séparées pour les valuations

Nécessité de connaître rapidement tous les Nécessité de connaître rapidement tous les voisins d’un sommet donnévoisins d’un sommet donné Liste de voisins pour chaque sommetListe de voisins pour chaque sommet Structure symétrique (graphes symétriques)Structure symétrique (graphes symétriques)

Facilement modifiableFacilement modifiable Possibilité d’ajouter, de supprimer des sommets, des Possibilité d’ajouter, de supprimer des sommets, des

arêtes, …arêtes, …

i j i adj(j) j adj(i)

Page 6: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

6© 2002 ScAlApplix

Stockage des adjacences (1)Stockage des adjacences (1)

Nombre de sommets Nombre de sommets vertnbrvertnbr et nombre d’arcs et nombre d’arcs edgenbredgenbr

Tableaux donnant l’indice de début Tableaux donnant l’indice de début verttabverttab et et l’indice de fin l’indice de fin vendtabvendtab dans le tableau des dans le tableau des extrémités d’arcs extrémités d’arcs edgetabedgetab de taille maximale de taille maximale donnée donnée edgemaxedgemax Plage des numéros de sommets densePlage des numéros de sommets dense Tableau Tableau edgetabedgetab non nécessairement dense non nécessairement dense Sommets non nécessairement ordonnés dans Sommets non nécessairement ordonnés dans edgetabedgetab

Listes d’adjacence non triées dans Listes d’adjacence non triées dans edgetabedgetab ((vendtab[i]vendtab[i] –– verttab[i]verttab[i]) est le degré du sommet ) est le degré du sommet ii

Page 7: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

7© 2002 ScAlApplix

Stockage des adjacences (2)Stockage des adjacences (2)

On parcourt la structure de la façon suivante :On parcourt la structure de la façon suivante :

2

3

1

4

14

4

edgemax

edgenbr

vertnbr

10

verttab

edgetab 2 3 . . 1 2 4 3 2 3 4 1 . .

1 10 5 8

vendtab 3 13 8 13

for (vertnum = 0; vertnum < vertnbr; vertnum ++) { for (edgenum = verttab[vertnum]; edgenum < vendtab[vertnum]; edgenum ++) { vertend = edgetab[edgenum]; … }}

Page 8: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

8© 2002 ScAlApplix

Stockage compact des sommetsStockage compact des sommets

Si toutes les adjacences sont stockées de Si toutes les adjacences sont stockées de façon dense et ordonnée dans façon dense et ordonnée dans edgetabedgetab, on , on n’a plus besoin d’allouer qu’un seul tableau n’a plus besoin d’allouer qu’un seul tableau d’index, de taille (d’index, de taille (vertnbrvertnbr ++ 11)) vendtabvendtab pointe sur ( pointe sur (verttabverttab ++ 11))

2

3

1

4

10

4

edgemax

edgenbr

vertnbr

10

verttab 111 3 6 9

vendtab

edgetab 2 3 3 4 1 1 2 4 3 2

Page 9: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

9© 2002 ScAlApplix

Valeur de base des index (1)Valeur de base des index (1)

Selon que l’on adresse les tableaux à partir Selon que l’on adresse les tableaux à partir de C ou de FORTRAN, les valeurs d’index de C ou de FORTRAN, les valeurs d’index diffèrentdiffèrent Commencent à zéro en CCommencent à zéro en C Commencent à un en FORTRANCommencent à un en FORTRAN

Problème d’indexation double, du type :Problème d’indexation double, du type : edgetaedgetabb[verttab[vertnum]][verttab[vertnum]]

Parcours en C d’un graphe créé en FORTRAN :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 ! … }}

Page 10: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

10© 2002 ScAlApplix

Valeur de base des index (2)Valeur de base des index (2)

La structure de graphe conserve la valeur de La structure de graphe conserve la valeur de base des index de ses tableaux, base des index de ses tableaux, basevalbaseval

Les accès basés se font à travers des Les accès basés se font à travers des références basées aux tableaux références basées aux tableaux verttaxverttax, , vendtaxvendtax, , edgetaxedgetax verttaxverttax vau vautt ( (verttabverttab -- basevalbaseval)) vendtaxvendtax vau vautt ( (vendtabvendtab -- basevalbaseval)) edgetaxedgetax vau vautt ( (edgetabedgetab -- basevalbaseval))

La valeur La valeur vertnndvertnnd vaut ( vaut (vertnbrvertnbr ++ basevalbaseval))

Page 11: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

11© 2002 ScAlApplix

Valeur de base des index (3)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é …

2

3

1

4

10

4

edgemax

edgenbr

vertnbr

10

verttab 111 3 6 9

vendtab

edgetab 2 3 3 4 1 1 2 4 3 2

1baseval

5vertnnd

verttaxvendtax

Page 12: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

12© 2002 ScAlApplix

Structure de donnéesStructure 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;

Page 13: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

Permutation par blocsPermutation par blocs

Page 14: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

14© 2002 ScAlApplix

Cahier des chargesCahier des charges

Spécifier de façon compacte une permutation Spécifier de façon compacte une permutation par blocs des sommets d’un graphe, par blocs des sommets d’un graphe, représentant la renumérotation de ses sommetsreprésentant la renumérotation de ses sommets Numérotation dépendant de l’index de base du Numérotation dépendant de l’index de base du

graphegraphe La permutation inverse est plus intéressante La permutation inverse est plus intéressante

que la permutation directeque la permutation directe Zone continue d’indices pour tout sous-graphe à Zone continue d’indices pour tout sous-graphe à

renuméroterrenuméroter Favorise donc la localité des données et le cacheFavorise donc la localité des données et le cache Permet d’exprimer les blocs de la renumérotation Permet d’exprimer les blocs de la renumérotation

comme des plages continues d’indicescomme des plages continues d’indices

Page 15: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

15© 2002 ScAlApplix

Permutation par blocsPermutation par blocs

La permutation inverse est contenue dans un La permutation inverse est contenue dans un tableau basé, tableau basé, peritaxperitax On peut en déduire la permutation directe, On peut en déduire la permutation directe, permtaxpermtax

Les Les rangnbrrangnbr plages de numérotation sont plages de numérotation sont stockées au moyen du tableau compact stockées au moyen du tableau compact rangtaxrangtax, de taille (, de taille (rangnbrrangnbr ++ 11), contenant ), contenant les indices de début de chaque plage, et les indices de début de chaque plage, et terminé par terminé par vertnndvertnnd ((rangtax[i+1]rangtax[i+1] –– rangtax[i]rangtax[i]) est la taille de la ) est la taille de la

plage plage ii

Page 16: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

16© 2002 ScAlApplix

Structure de donnéesStructure 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;

Page 17: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

Matrice symétrique factorisée Matrice symétrique factorisée symboliquement par blocssymboliquement par blocs

Page 18: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

18© 2002 ScAlApplix

Cahier des chargesCahier des charges

Représenter de façon compacte une matrice Représenter de façon compacte une matrice symétrique factorisée symboliquement par symétrique factorisée symboliquement par blocsblocs Numérotation dépendant de l’index de base du Numérotation dépendant de l’index de base du

graphegraphe Structure servant de support à la structure Structure servant de support à la structure

distribuée de matrice factorisée numériquement distribuée de matrice factorisée numériquement par blocspar blocs

Page 19: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

19© 2002 ScAlApplix

Blocs colonnes et blocs (1)Blocs colonnes et blocs (1)

Les plages de la renumérotation définissent Les plages de la renumérotation définissent des blocs colonnesdes blocs colonnes cblknbrcblknbr est le nombre de blocs colonnes est le nombre de blocs colonnes Stockage compact dans un tableau unique Stockage compact dans un tableau unique

((cblktabcblktab) de taille () de taille (cblknbrcblknbr ++ 11)) Les bornes de la colonne sont (Les bornes de la colonne sont (fcolnumfcolnum, , lcolnumlcolnum)) ((cblktax[i+1].bloknumcblktax[i+1].bloknum –– cblktax[i].bloknumcblktax[i].bloknum) )

est le nombre de blocs contenus dans le bloc est le nombre de blocs contenus dans le bloc colonne colonne ii

Page 20: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

20© 2002 ScAlApplix

Blocs colonnes et blocs (2)Blocs colonnes et blocs (2)

Dans chaque bloc colonne, les blocs sont Dans chaque bloc colonne, les blocs sont définis par leurs indices de ligne (définis par leurs indices de ligne (frownumfrownum, , lrownumlrownum) et le numéro global du bloc colonne ) et le numéro global du bloc colonne en regard (en regard (cblknumcblknum) ) bloknbrbloknbr est le nombre de blocs colonnes est le nombre de blocs colonnes Stockage compact dans un tableau unique Stockage compact dans un tableau unique

((bloktabbloktab) de taille ) de taille bloknbrbloknbr

Page 21: Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800

21© 2002 ScAlApplix

Structure de donnéesStructure 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;