Formation M2i - Comprendre les neurosciences pour développer son leadership
Evaluation de la quantité de travail (in)utile dans l’exécution des programmes
1. Soutenance de stage de DEA
É valuation de la quantité de travail utile dans
l’’exécution des programmes
Stage encadré par P. Michaud
et effectué par B. Vidal
Projet CAPS
2. Dé finition
• Une instruction dynamique est utile si
- Elle produit un résultat émis en sortie
- Elle produit un résultat utilisé comme opérande
d’’une instruction utile
- C’’est un branchement
2
3. 3
Bibliographie
• Différentes définitions du travail inutile
- Valeurs mortes dynamiques
G. Sohi & A. Butt
ASPLOS X - oct. 2002
- É critures silencieuses
M. Lipasti, K. Lepak & G. Bell
IEEE, vol. 50, No. 11 - nov. 2001
- É valuation de l’’ensemble du travail inutile
après exécution
13. La mé thode utilisé e [2]
• Graphe de dépendance de donnée
- Construction au cours de l’’exécution
- Relier les instructions dépendantes
Registres
Mémoire
• Parcours du graphe
- Sources (sorties ou branchements)
- Marquage des instructions utiles
4
14. Optimisation
• Réduction du graphe
- Suppression des noeoeuds certifiés utiles
A mesure que le programme se déroule
Un noeoeud utile ne peut devenir inutile
- Suppression des noeoeuds certifiés inutiles
Une instruction n’’est accessible depuis aucune
ressource
Système de ramasse-miette
5
16. Optimisation
• Réduction du graphe
- Suppression des noeoeuds certifiés utiles
A mesure que le programme se déroule
Un noeoeud utile ne peut devenir inutile
- Suppression des noeoeuds certifiés inutiles
Une instruction n’’est accessible depuis aucune
ressource
Système de ramasse-miette
5
17. Mise en oeoeuvre
• Salto
- Récupérer des informations statiques
- Instrumenter du code assembleur
Insérer des instructions
• Au cours de l’’exécution
- Récupérer des informations dynamiques
Ordre d’’exécution
Adresses des accès à la mémoire
É tat du système
6
23. Instrumentation [2]
• Différentes phases
- Sauvegarde du contexte
- Création de la structure de donnée
- Traitement des opérandes
- Traitement des résultats
- Parcours du graphe si nécessaire
- Restauration du contexte
8
24. Vé rification
• Ré-exécution du même programme avec
les mêmes données en entrée
- Saut des instructions inutiles
• Vérification que les deux exécutions sont
équivalentes
9
25. Ré sultats
• Tests effectués sur GZIP et GUNZIP
- Sans optimisation de compilation
Entre 1 et 11 % de travail inutile en moyenne
- Avec optimisations de compilation
Entre 10 et 12 % de travail inutile en moyenne
- Dépend du type de traitement
Compression
Décompression
- Dépend du fichier traité
10
26. Analyse [1]
11
GZIP sur un fichier texte de 2 Ko
Sans optimisation de compilation
Nombre d’instructions dynamiques
Nombre d’instructions inutiles
27. Analyse [2]
• Phase d’’initialisation
≈≈ 50 % de travail inutile
• Coeoeur de l’’algorithme de compression
- Sans optimisation de compilation
≈≈ 7 % de travail inutile
- Avec optimisations de compilation
≈≈ 10 % de travail inutile
12
28. Analyse [3]
• Exemple d’’initialisation
prev_match = match_start;
. . .
if (prev_length>=MIN_MATCH &&
match_length<=prev_length) {
check_match(strstart-1, prev_match, prev_length);
. . .
}
Affectation inutile dans 95 % des cas
13
29. Analyse [4]
• Au coeoeur de l’’algorithme
- « Dictionnaire »
- Insertion d’’un nouvel élément (chaî ne)
- Recherche de redondance
- Comparaison progressive
Lazy evaluation mechanism
- Insertion d’’éléments n’’apparaissant qu’’une fois
Travail inutile
14
30. Conclusion
• Quantifier le travail inutile
- Proportion non négligeable dans GZIP
• Comprendre d’’où il provient
- Algorithme
Inhérent à l’’algorithme
Du à une implémentation « naï ve »
- Compilation
• É viter ce travail
- Outil d’’aide au programmeur
15
Notes de l'éditeur
Bonjour...
Expliquer à l’oral la définition retenue du travail inutile (déf. récursive)
Expliquer d’emblée le but du stage
Donner rapidement à l’oral les deux autres définitions et les comparer à la notre.
Mettre en évidence le fait que les valeurs mortes dynamiques sont un sous ensemble de notre def. Et que les écritures silencieuses sont disjointe à la def.
Expliquer le principe de la table de l’état mémoire/registres
Introduire les problèmes mémoire posés par cet algorithme !
Expliquer à l’oral ce que représente un arc du graphe (un lien de dépendance partant du consommateur d’une ressource et allant à son producteur).
Expliquer qu’il sagit d’un graphe de dépendance de donnée dynamique ! =&gt; il est impossible de le construire avant l’exécution.
Dire que chaque instruction dynamique du programme est un noeud.
Expliquer que le parcours du graphe part d&apos;une source (noeud de sortie ou de branchement) et parcours tous les arcs sortants de ce noeud (opérandes de l&apos;instruction).
Ainsi de suite récursivement jusqu&apos;à arriver à des puits du graphe (instruction sans opérandes : instructions d&apos;affectation d&apos;une constante ou entrée d&apos;une donnée par l&apos;utilisateur).
Ne pas oublier de parler de GZIP
Gros problème de l’algo précédent : on est obligé de garder en mémoire une quantité d’information très importante pendant l’exécution du programme =&gt; impossible de tester de gros programmes (limité à 300 000 instructions).
Réduction du graphe =&gt; réduction de l’occupation mémoire.
Grace aux optimisations proposées qui ont été implémentées (libération mémoire des noeuds certifiés utiles seulement) =&gt; jusqu’à 1 000 000 d’instructions (gain d’un facteur 3 à 4).
Expliquer que les noeuds peuvent être certifiés utiles à mesure que le programme se déroule si on a des sorties intermédiaires.
Transition avec prec : solution au problème de mémoire rencontrés : optimisation.
Gros problème de l’algo précédent : on est obligé de garder en mémoire une quantité d’information très importante pendant l’exécution du programme =&gt; impossible de tester de gros programmes (limité à 300 000 instructions).
Réduction du graphe =&gt; réduction de l’occupation mémoire.
Grace aux optimisations proposées qui ont été implémentées (libération mémoire des noeuds certifiés utiles seulement) =&gt; jusqu’à 1 000 000 d’instructions (gain d’un facteur 3 à 4).
Expliquer que les noeuds peuvent être certifiés utiles à mesure que le programme se déroule si on a des sorties intermédiaires.
Transition avec prec : solution au problème de mémoire rencontrés : optimisation.
Gros problème de l’algo précédent : on est obligé de garder en mémoire une quantité d’information très importante pendant l’exécution du programme =&gt; impossible de tester de gros programmes (limité à 300 000 instructions).
Réduction du graphe =&gt; réduction de l’occupation mémoire.
Grace aux optimisations proposées qui ont été implémentées (libération mémoire des noeuds certifiés utiles seulement) =&gt; jusqu’à 1 000 000 d’instructions (gain d’un facteur 3 à 4).
Expliquer que les noeuds peuvent être certifiés utiles à mesure que le programme se déroule si on a des sorties intermédiaires.
Transition avec prec : solution au problème de mémoire rencontrés : optimisation.
On ne passe pas trop de temps sur l’implémentation mais il nous a semblé intéressant de mettre en lumière la méthode qui nous a permis de récupérer des information dynamiques : l’instrumentation.
Expliquer à l’oral que l’état du système permet de connaitre le niveau de la fenêtre de registres dans le cas de l’architecture utilisée (Sparc).
Dans notre cas nous avions besoin de -&gt; transp suivant
La façon dont nous avons instrumenté chaque instruction.
Expliquer le travail qui est fait au niveau de chacune des phases.
Expliquer que cette vérification à permis d’affiner l’implémentation du premier programme et de s’assurer que le travail inutile l’était bien.
Expliquer qu’on n’a réussi à le faire tourner que sur un niveau d’optimisation de compilation nul.
Expliquer qu’on a écarté de ces chiffres le cas particulier ou on recompresse/décompresse un fichier déjà compressé.
Donner les conditions de tests à l’oral + marquer de quoi il sagit