Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parHenri Froment Modifié depuis plus de 10 années
1
Optimisation dynamique logicielle des accès aux données par prédiction de Markov sur les pas en mémoire et préchargement. Implantation dans le compilateur Open64. Jean Christophe Beyler ICPS/LSIIT Université de Louis Pasteur de Strasbourg 16/12/2004
2
Plan Présentation Présentation Système dynamique Système dynamique Modèle Markovien Modèle Markovien Exemple dimplémentation Exemple dimplémentation Création du modèle Création du modèle Résultats expérimentaux Résultats expérimentaux Open64 Open64 Conclusion Conclusion
3
Présentation Optimisation statique: Optimisation statique: Lors de la compilation Lors de la compilation Limitations des optimisations statiques Limitations des optimisations statiques Paramètres inconnus lors de la compilation Paramètres inconnus lors de la compilation Les défauts de cache Les défauts de cache Techniques de préchargement simples Techniques de préchargement simples
4
Présentation Utilisation dun système dynamique: Utilisation dun système dynamique: Exécution doptimisation pendant lexécution Exécution doptimisation pendant lexécution Solution matérielle : Solution matérielle : Permet de repérer les défauts de cache Permet de repérer les défauts de cache Plus rapide mais il y a un coût en matériel Plus rapide mais il y a un coût en matériel Solution logicielle : Solution logicielle : Portable Portable Modelable Modelable Plus lent Plus lent
5
Historique de systèmes logiciels Dynamo (Hewlett Packard) en 2000 (Duesterwald et al.): Dynamo (Hewlett Packard) en 2000 (Duesterwald et al.): Optimise des portions du code Optimise des portions du code Transparent Transparent Deli (Hewlett Packard) en 2002 (Duesterwald et al.): Deli (Hewlett Packard) en 2002 (Duesterwald et al.): Optimise des portions du code Optimise des portions du code 2 versions: Transparente et API 2 versions: Transparente et API Un autre optimiseur en 2002 (Chilimbi et Hirzel) : Un autre optimiseur en 2002 (Chilimbi et Hirzel) : Optimisation des accès mémoire Optimisation des accès mémoire Autonome et puissant mais que sous Windows Autonome et puissant mais que sous Windows Adore en 2003 (Lu et al.): Adore en 2003 (Lu et al.): Optimisation des accès mémoire : insertions de lfetch (Itanium) Optimisation des accès mémoire : insertions de lfetch (Itanium) Limité au cas des boucles Limité au cas des boucles
6
Modèle Markovien Analyse statistique dune suite S déléments (des accès mémoire dans notre cas) Analyse statistique dune suite S déléments (des accès mémoire dans notre cas) Mise sous forme de couples (X,Y) où: Mise sous forme de couples (X,Y) où: X et Y sont des éléments de la suite X et Y sont des éléments de la suite X précède Y X précède Y Mais aussi (S,Y) où: Mais aussi (S,Y) où: S est une sous suite de S S est une sous suite de S Tous les éléments de S précèdent Y Tous les éléments de S précèdent Y
7
Système dynamique logiciel Propriétés générales : Propriétés générales : Sexécute en même temps que le programme cible Sexécute en même temps que le programme cible Portable Portable Relativement léger Relativement léger Facile à utiliser Facile à utiliser Propriétés spécifiques à ESODYP (An Entirely Software and Dynamic Data Prefetcher) : Propriétés spécifiques à ESODYP (An Entirely Software and Dynamic Data Prefetcher) : Modélise les comportements mémoires Modélise les comportements mémoires En étudiant les sauts mémoires effectués En étudiant les sauts mémoires effectués Précharge les données dans le cache Précharge les données dans le cache
8
Déroulement de notre modèle 1) Le programme cible envoie les accès mémoire au modèle 2) Deux possibilités : 1) Il modélise le comportement des accès mémoires reçus (phase de construction) 2) Il exploite les données afin de prédire et précharger les futurs accès (phase de prédiction)
9
Structures de données Le programme peut posséder plusieurs accès coûteux Le programme peut posséder plusieurs accès coûteux Chaque séquence est probablement unique: Chaque séquence est probablement unique: Paramètres différents utilisés par le modèle Paramètres différents utilisés par le modèle Réactions différentes du modèle par rapport aux séquences Réactions différentes du modèle par rapport aux séquences Chaque séquence aura une structure de données associée Chaque séquence aura une structure de données associée
10
Exemple concret Treeadd du banc dessai Olden Treeadd du banc dessai Olden Création et parcours dun arbre binaire par la gauche Création et parcours dun arbre binaire par la gauche Modification du code Modification du code Plus de 90% du temps se déroule dans la fonction Treeadd Plus de 90% du temps se déroule dans la fonction Treeadd Dans cet exemple, un accès nous intéresse donc une seule structure est nécessaire Dans cet exemple, un accès nous intéresse donc une seule structure est nécessaire
11
Initialisation Durée de construction Durée de construction Profondeur Profondeur Distance Distance Erreurs maximum Erreurs maximum
12
Code de la fonction Treeadd int TreeAdd (t) register tree_t *t; {... tleft = t->left; t : donnée intéressante à leftval = TreeAdd(tleft); précharger tright = t->right; rightval = TreeAdd(tright); value = t->val; return leftval + rightval + value; }
13
Code de la fonction Treeadd int TreeAdd (t) register tree_t *t;m1: structure de données { associée... #ifdef __MARKOV__fct : pointeur de fonction, m1->fct(m1,t);permet de passer linformation #endif tleft = t->left;t : donnée intéressante à leftval = TreeAdd(tleft);précharger tright = t->right; rightval = TreeAdd(tright); value = t->val; return leftval + rightval + value; }
14
La fonction fct int TreeAdd (t) register tree_t *t; {... #ifdef __MARKOV__ m1->fct(m1,t); m1->fct(m1,t);#endif tleft = t->left; leftval = TreeAdd(tleft); tright = t->right; rightval = TreeAdd(tright); value = t->val; return leftval + rightval + value; } Pointeur de fonction permet de : passer de la phase de construction à la phase de prédiction Paramètres 1. Structure m1 permettant de modifier fct et les autres données 2. La donnée qui est un élément de la séquence à étudier Chaque séquence possède sa propre structure Paramètres différents Phase différente
15
Remarques La plupart des optimiseurs : La plupart des optimiseurs : Sintéressent aux adresses accédées : Sintéressent aux adresses accédées : Un programme accédant trop dadresses distinctes nest pas parfaitement modélisable Un programme accédant trop dadresses distinctes nest pas parfaitement modélisable Notre modèle : Notre modèle : Sintéresse aux sauts effectués : Sintéresse aux sauts effectués : Permet de simplifier le modèle dans le cas de programmes ayant un comportement mémoire « suffisamment constant » Permet de simplifier le modèle dans le cas de programmes ayant un comportement mémoire « suffisamment constant » Préchargement de plusieurs sauts en avance : Préchargement de plusieurs sauts en avance : Permettre au chargement de se finir Permettre au chargement de se finir Danger décrasement de données Danger décrasement de données
16
Type de modèle Suite récupérée : 1 2 16 2 32 2 16 2 32 Suite récupérée : 1 2 16 2 32 2 16 2 32 Modèle statistique mais sous forme: Modèle statistique mais sous forme: De tableau? De tableau? De graphe? De graphe?
17
Un tableau 1 2 16 2 32 2 16 2 32 12 216,32 162 322 Profondeur : 1 Incertitude sur une des prédictions
18
Un tableau 1 2 16 2 32 2 16 2 32 1,216 2,162 16,232 2,322 32,216 Profondeur : 2 Prédiction plus fine Inconvénients avec des tableaux : Problèmes dallocation Temps de recherche dune suite
19
Création du graphe 1 2 16 2 32 2 16 2 32 1
20
1 2 2 11 2 21 Création du graphe 1 2 16 2 32 2 16 2 32
21
2 2 16 1 1 Création du graphe 1 2 16 2 32 2 16 2 32 1 11 2 2 16 1 1
22
2 2 2 1 1 1 1 1 2 1 2 2 1 1 Création du graphe 1 2 16 2 32 2 16 2 32 1 1
23
1 2 1 2 2 1 16 1 Création du graphe 1 2 16 2 32 2 16 2 32 1 16 1 1 1 32 1 1 2 2 2 1 1 1 1
24
2 2 2 1 1 2 2 2 1 1 1 1 Création du graphe 1 2 16 2 32 2 16 2 32 1 16 2 1 1 1 1 2 1 1 232 1 1 1
25
2 1 1 2 1 1 1 Création du graphe 1 2 16 2 32 2 16 2 32 1 16 2 1 1 1 1 1 2 1 1 232 1 1 1 16 2 2
26
2 2 1 1 32 1 1 1 16 2 1 2 1 1 Création du graphe 1 2 16 2 32 2 16 2 32 1 1 1 1 1 2 1 2 2 16 2 2 2
27
2 2 2 1 1 232 1 1 1 16 2 2 Création du graphe 1 2 16 2 32 2 16 2 32 1 1 1 2 32 2 2 2 2 2 2
28
Début des prédictions Temps de construction assez lourd Temps de construction assez lourd Arrêt de la construction Arrêt de la construction Utilisation du modèle tant quil est efficace Utilisation du modèle tant quil est efficace Représente bien le comportement Représente bien le comportement Un programme possède plusieurs phases : Un programme possède plusieurs phases : Graphe spécifique à la phase Graphe spécifique à la phase Reconstruction lorsque le nombre derreurs consécutives est trop importante Reconstruction lorsque le nombre derreurs consécutives est trop importante Equilibre entre trop de constructions et trop derreurs Equilibre entre trop de constructions et trop derreurs
29
2 2 32 1 2 1 2 2 2 2 2 1 1 2 2 2 Phase de prédiction 2 16 1 48 2 16 2 16 2 1 1 1 2 2 Erreurs consécutives:0
30
2 16 2 2 22 32 2 2 1 2 16 1 2 2 2 32 Phase de prédiction 2 16 1 48 2 16 2 16 2 1 1 1 2 2 32 Erreurs consécutives:0 2 32
31
16 2 2 2 32 2 2 2 2 2 Phase de prédiction 2 16 1 48 2 16 2 16 2 1 1 1 2 2 32 Erreurs consécutives:0 2 1 16 1 1
32
1 1 2 2 2 32 2 2 2 2 2 Phase de prédiction 2 16 1 48 2 16 2 16 21 1 2 2 32 Erreurs consécutives: 2 1 2 1 1 2
33
1 1 16 2 2 2 32 2 2 2 2 2 Phase de prédiction 2 16 1 48 2 16 2 16 21 1 2 2 32 Erreurs consécutives: 2 2 2 3
34
2 1 1 16 2 2 2 32 2 2 2 2 Phase de prédiction 2 16 1 48 2 16 2 16 1 1 2 2 32 Erreurs consécutives: 2 3 2 0 2 2 2 16
35
Résultats sur Itanium-2 treeadd : distance est importante ks : profondeur 2 est meilleure equake : distance trop grande peut faire baisser laccélération mcf : meilleure optimisation
36
Résultats sur AMD Athlon XP 2600+ Raisons pour les différences: prefetch: instruction différente Différentes taille de lignes de cache: Itanium-2 : L2-D 128 octets Athlon XP 2600+: L2-D 64 octets Vitesse de programme
37
Remarques sur le modéle Le modèle est: Le modèle est: Portable Portable Réaliste Réaliste Pas encore autonome et transparent Pas encore autonome et transparent Quatre critères à choisir: Quatre critères à choisir: Durée de construction Durée de construction Profondeur Profondeur Distance de préchargements Distance de préchargements Erreurs maximum avant reconstruction Erreurs maximum avant reconstruction Il faut trouver les accès à la main Il faut trouver les accès à la main
38
Transparence Utilisation du compilateur Open64 Utilisation du compilateur Open64 Compilateur Open-Source pour lItanium dIntel Compilateur Open-Source pour lItanium dIntel Compile le C, C++ et le Fortran 90/95 Compile le C, C++ et le Fortran 90/95 Permet dimplémenter un profileur Permet dimplémenter un profileur Première exécution pour déterminer les accès intéressants Première exécution pour déterminer les accès intéressants Aide à choisir les accès intéressants Aide à choisir les accès intéressants Laisse juste la distance de préchargement à déterminer Laisse juste la distance de préchargement à déterminer
39
Open64 back end (be, as) linker (ld) WHIRL (.B/.I) obj (.o) a.out/.so Data Path Fork and Exec driver (sgicc/sgif90/sgiCC) front end + IPA (gfec/gfecc/mfef90) Src (.c/.C/.f) WHIRL: Winning Hierarchical Intermediate Representation Language
40
Open64 Lower to High W. gfec gfecc f90 Local IPA Main IPA LNO Inliner WHIRL C WHIRL fortran Main opt Lower all lower I/O Lower Mid W CG.B.I -O 3.w2c.c -IPA.w2c.h.w2f.f -O 0 -O 2 /O 3 -phase: w=off Very high WHIRL High WHIRL Mid WHIRL Low WHIRL Take either path (only for f90)
41
La modification de Open64 Modification de larbre syntaxique Modification de larbre syntaxique Lors dun chargement Lors dun chargement Appel dune fonction externe pour étudier le comportement mémoire Appel dune fonction externe pour étudier le comportement mémoire Utilisant plusieurs paramètres différents Utilisant plusieurs paramètres différents Modification du code source Modification du code source Ajout de deux appels: create_Markov_manager, stop_Markov_manager Ajout de deux appels: create_Markov_manager, stop_Markov_manager Permet dinitialiser la mémoire Permet dinitialiser la mémoire Permet dafficher les résultats Permet dafficher les résultats
42
Arbre syntaxique Instructions précédentes Prochaines instructions Load A Registre R = A m->fct(m,R) Load R Avantage de Open64: Simple à mettre en œuvre API riche Remarques: Version simplifiée Cas du if, boucle…
43
Et ensuite… On classe les résultats, conservant ceux ayant les meilleurs résultats. On classe les résultats, conservant ceux ayant les meilleurs résultats. Problème de: Problème de: Classement Classement Sélection Sélection Ces derniers seront insérés par le compilateur pour permettre dobtenir des accélérations. Ces derniers seront insérés par le compilateur pour permettre dobtenir des accélérations.
44
Conclusions Lutilisation de Open64 permet Lutilisation de Open64 permet De choisir les accès potentiels et de déterminer la profondeur de création, de construction… De choisir les accès potentiels et de déterminer la profondeur de création, de construction… Donc rendre transparent le modèle Donc rendre transparent le modèle Par contre, la distance de préchargement vis-à-vis du temps est difficilement discernable. Par contre, la distance de préchargement vis-à-vis du temps est difficilement discernable. Perspectives: Perspectives: Rendre le modèle plus efficace Rendre le modèle plus efficace Rendre le modèle de sélection plus intelligent Rendre le modèle de sélection plus intelligent
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.