| 1 | {{{ |
| 2 | COMPTE RENDU DE LA RÉUNION DU 16 Juillet 2009 |
| 3 | |
| 4 | ----------------------------------------------------------------- |
| 5 | |
| 6 | La réunion avait pour objectif de définir (A) l'interfaçage entre GCC et |
| 7 | les outils développés dans le cadre du projet COACH et (B) la définition |
| 8 | du format d'un CDFG généré par GCC. |
| 9 | Elle s'est terminée par un nombre d'actions pour la prochaine réunion (C). |
| 10 | |
| 11 | ----------------------------------------------------------------- |
| 12 | A) interfaçage entre GCC et les outils de synthèse |
| 13 | |
| 14 | Il existe dans la dernière version de GCC un langage nommé |
| 15 | PCP qui permet d'externaliser certaines informations (les SCOP) sur les |
| 16 | boucles à partir du format interne de GCC (format nommé GIMPLE). |
| 17 | Il a étét conclus que ce langage ne serait pas utilisé mais que seule la |
| 18 | detection des SCOP fournie par Graphite serait utilisée pour annoter directement |
| 19 | GIMPLE (en interne ?) et obtenir notre CDFG au format XML (des balises seront |
| 20 | utilisées pour repérer les SCOP). |
| 21 | |
| 22 | Le CDFG généré par GCC au format XML contiendra les SCOP |
| 23 | |
| 24 | |
| 25 | C-Tuning et I.C.I seront utilisés pour diriger la compilation et l'ordre |
| 26 | des passes d'optimisation faite dans GCC. Ceci permettra de faire la |
| 27 | detection des scop en dernier dans le flot de compilation. |
| 28 | |
| 29 | L'utilisation de Graphite pour transformer les boucles sera possible |
| 30 | (ca ne coute rien). |
| 31 | |
| 32 | Le Flot serait le suivant |
| 33 | |
| 34 | C => GCC piloté par ICI => CDFG_1 => moulinette => CDFG_2 |
| 35 | |
| 36 | Définition d'un unique format CDFG qui servira a décrire un modele CDFG_1 |
| 37 | proche de Gimple (pour etre le plus indépendant de GCC) et un CDFG_2 qui sera |
| 38 | plus simple que CDFG_1. Il faudra donc développer un outil pour passer de |
| 39 | CDFG_1 à CDFG_2. CDFG_1 et CDFG_2 contiennent les SCOP. |
| 40 | |
| 41 | Exemple de transformation réalisées dans la moulinette pour passer |
| 42 | de CDFG_1 vers CDFG_2 |
| 43 | - suppression des pointeurs |
| 44 | - linéarisation des tableaux |
| 45 | - Transformation des Inout des paramètres des fonctions en in out out |
| 46 | avec usne analyse de dependance de données durant la transformation de |
| 47 | CDFG_1 vers CDFG_2 |
| 48 | |
| 49 | Linéarisation/délinéarisation des tableaux |
| 50 | |
| 51 | Suppression/transformation des pointeurs statiquement determinable |
| 52 | (passage par référence uniquement ?) |
| 53 | |
| 54 | ----------------------------------------------------------------- |
| 55 | B) Définition du format général du CDFG |
| 56 | |
| 57 | FIGURE: |
| 58 | - un nom |
| 59 | - un ensemble de FIGURES |
| 60 | - un ensemble de VARIABLES |
| 61 | - un GRAPHE de BB (Basic Bloc) |
| 62 | - un ensemble de PARAMETRES |
| 63 | |
| 64 | VARIABLE: |
| 65 | - un nom |
| 66 | - un type |
| 67 | les types sont: |
| 68 | * signé + bit-size |
| 69 | * non-signé + bit-size |
| 70 | * virgule fixe (signe/non-signé, bit-size, position de la virule, |
| 71 | arrondi) |
| 72 | * les pointeurs ( CDFG_1 uniquement) |
| 73 | * les strctures des types précédents et suivants. |
| 74 | * les tableaux à 1 ou plusieurs dimensions des types précédents. |
| 75 | |
| 76 | PARAMETRE: |
| 77 | - une variable |
| 78 | - un attribut: in, out inout |
| 79 | |
| 80 | GRAPHE de BB: |
| 81 | - un ensemble de BB |
| 82 | |
| 83 | BB: |
| 84 | - un identifiant |
| 85 | - une suite linéaire d'instruction chaque BB contient un AST proche |
| 86 | du format défini par Paul. La linéarisation des tableaux sera faite |
| 87 | à priori sur le format CDFG et non dans GCC (si c'est une passe |
| 88 | d'optimisation de GCC alors est-elle faisable en dernier via I.C.I ? |
| 89 | Dominique doit confirmer) |
| 90 | - un ensemble de couples (condition, identifiant de BB). |
| 91 | - liste(s?) des variables utilisées en entrée et sortie du BB (si gimple |
| 92 | le fournit oui sinon non . Dominique doit confirmer) |
| 93 | |
| 94 | Quelques précisons: |
| 95 | a) la portée des variables (SCOPE) |
| 96 | gcc a applatit le graphe => les données appartiennent à la figure |
| 97 | la plus proche (concrètement: 1 SCOPE par fonction + 1 SCOPE global). |
| 98 | Chaque fonction a ses propores variables et il existe des variables |
| 99 | globales (en dehors du main). En cas de conflits, la variable la plus |
| 100 | locale gagne (règle ANSI). |
| 101 | Les données seront préfixées par le nom de la fonction pour éviter les |
| 102 | problèmes. |
| 103 | Conservation des frontières de dominances fournies par gcc qui permettra |
| 104 | de passer en mode SSA ou alors utilisation des PHY-fonction pour faire |
| 105 | la même chose. |
| 106 | b) appel de fonction: |
| 107 | cas 1: mise en ligne => no problem |
| 108 | cas 2: le BB contient une instruction d'appel à une figure avec les |
| 109 | paramètres. |
| 110 | Un appel de fonction peut-il être dans un BB avec d'autres |
| 111 | instructions? |
| 112 | c) si |
| 113 | un BB peut avoir plusieurs BB successeurs. 2 comme dans Gimple |
| 114 | ou avec des arcs parallèle exprimé par des jumps ou des |
| 115 | if elsif elif .. ou switch. |
| 116 | d) boucle |
| 117 | BLOC HIERARCHIQUE qui suit le format de GIMPLE des boucles. |
| 118 | (à préciser). |
| 119 | |
| 120 | ----------------------------------------------------------------- |
| 121 | C) ACTION pour la prochaine réunion |
| 122 | |
| 123 | - Dominique redigera un petit doc pour prendre en main GIMPLE ou savoir où |
| 124 | aller chercher l'information pour prendre en main ce format. |
| 125 | |
| 126 | - Proposition d'une DTD ou d'un schema du CDFG (Paul & Ivan) |
| 127 | Evocation d'une utilisation d'un "double chainage" (BB => BB + flow de controle) |
| 128 | |
| 129 | - Un serveur TRACK pour avoir un WIKI (LIP6 ?) |
| 130 | URL: https://www-soc.lip6.fr/trac/coach/ |
| 131 | LOGIN: coach |
| 132 | PASSWD: co!a!ch |
| 133 | |
| 134 | - Un doodle pour la prochaine réunion fin Septembre, début Octobre. |
| 135 | |
| 136 | |
| 137 | |
| 138 | }}} |