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. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800.

Présentations similaires


Présentation au sujet: "Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800."— Transcription de la présentation:

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

2 2© 2002 ScAlApplix Le 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 résoudre » à des problèmes dalgorithmique de graphes utilisés pour la résolution parallèle de grands systèmes linéaires creux : Appliquer des méthodes de type « diviser pour résoudre » à des problèmes dalgorithmique de graphes utilisés pour la résolution parallèle de grands systèmes linéaires creux : Partitionnement de graphes Partitionnement de graphes Placement statique Placement statique Renumérotation de matrices creuses Renumérotation de matrices creuses Algorithmes basés uniquement sur la topologie Algorithmes basés uniquement sur la topologie Étude de versions parallèles de ces algorithmes Étude de versions parallèles de ces algorithmes

3 3© 2002 ScAlApplix Le projet PaStiX Débuté en 1997 (thèses de P. Ramet, D. Goudin, P. Hénon) Débuté en 1997 (thèses de P. Ramet, D. Goudin, P. Hénon) Réalisation dune 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 Réalisation dune 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) Renumérotation (Scotch) Factorisation symbolique Factorisation symbolique Distribution des blocs (1D et/ou 2D) Distribution des blocs (1D et/ou 2D) Factorisation numérique Factorisation numérique Descente/remontée Descente/remontée

4 Structure de graphe

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

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

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

8 8© 2002 ScAlApplix Stockage compact des sommets Si toutes les adjacences sont stockées de façon dense et ordonnée dans edgetab, on na plus besoin dallouer quun seul tableau dindex, de taille ( vertnbr + 1 ) Si toutes les adjacences sont stockées de façon dense et ordonnée dans edgetab, on na plus besoin dallouer quun seul tableau dindex, de taille ( vertnbr + 1 ) vendtab pointe sur ( verttab + 1 ) vendtab pointe sur ( verttab + 1 ) edgemax edgenbr vertnbr 10 verttab vendtab edgetab

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

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

11 11© 2002 ScAlApplix 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é … edgemax edgenbr vertnbr 10 verttab vendtab edgetab baseval 5 vertnnd verttax vendtax

12 12© 2002 ScAlApplix 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;

13 Permutation par blocs

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

15 15© 2002 ScAlApplix Permutation par blocs La permutation inverse est contenue dans un tableau basé, peritax La permutation inverse est contenue dans un tableau basé, peritax On peut en déduire la permutation directe, permtax 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 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 ( rangtax[i+1] – rangtax[i] ) est la taille de la plage i

16 16© 2002 ScAlApplix 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;

17 Matrice symétrique factorisée symboliquement par blocs

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

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

20 20© 2002 ScAlApplix 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 ) 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 bloknbr est le nombre de blocs colonnes Stockage compact dans un tableau unique ( bloktab ) de taille bloknbr Stockage compact dans un tableau unique ( bloktab ) de taille bloknbr

21 21© 2002 ScAlApplix 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;


Télécharger ppt "Structures des projets. et. FrançoisPELLEGRINI François PELLEGRINI INRIA Futurs & LaBRI, UMR CNRS 5800."

Présentations similaires


Annonces Google