« Optimisation des compilateurs » : différence entre les versions

Contenu supprimé Contenu ajouté
imported>Dajdouj
Aucun résumé des modifications
imported>Dajdouj
Aucun résumé des modifications
Ligne 2 :
 
 
# élément 1 Définition :
 
C’est la procédure qui minimise certains facteurs (ou maximiser l’efficacité) d’un programme exécutable. Les facteurs les plus mis en considération sont le temps d’exécution. Néanmoins on pourrait éventuellement s’intéresser à minimiser la quantité de mémoire utilisé ou bien à la consommation en énergie du programme.
 
 
# élément 1 2 Techniques :
 
Les techniques d’optimisation peuvent être départagées en deux catégories. La première s’applique localement, sur une instruction ou bien sur tout le programme. La deuxième s’applique globalement et nous permet d’obtenir plus de gain mais avec une implémentation plus complexe.
 
* élément A Optimisation sur des fenêtres « peephole » :
 
Cette technique, appliquée après génération du code machine, consiste à examiner quelques instructions adjacentes et voire si c’est possible de les remplacer par une instruction ou une séquence d’instructions plus courte. Par exemple, une multiplication par deux peut être efficacement exécutée par un décalage à gauche ou par une simple addition de la valeur à elle-même.
Ligne 45 :
 
 
* élément B Optimisation des boucles :
 
Cette technique agit sur les instructions qui constituent la boucle. Cette procédure est très intéressante car une bonne partie du temps d’exécution d’un programme est dédié à l’exécution des boucles.
Ligne 216 :
 
 
# élément 3 Facteurs :
 
* élément A La machine elle- même :
 
Plusieurs choix de techniques d’optimisation sont basés sur les caractéristiques de la machine cible. C’est possible parfois de paramétrer ces différents facteurs qui dépendent de la machine, et de ce fait un compilateur peut optimiser plusieurs machines juste en changeant les paramètres. Le GCC est un parfait exemple de cette technique d’adaptation.
 
 
* élément B L’architecture du processeur cible :
 
• Le nombre de registres : Généralement, plus on a de registres, plus facile sera l’opération d’optimisation. En effet, les variables locales peuvent être enregistré dans les registres et n’ont pas dans la pile. En outre les résultats intermédiaires peuvent être sauvegardé dans les registres au lieu d’effectuer une opération d’écriture en suite une autre opération de lecture pour récupérer le résultat.
Ligne 233 :
• Le nombre d’unités fonctionnelles : Un processeur peut posséder plusieurs ALU et FPU (unité de calcul en virgule flottante). Cela permettra d’exécuter des instructions en parallèle. Ou en d’autres termes, cela nous permettra de mettre les instructions en pairs. Ici aussi un ordonnancement minutieux doit être effectué par le compilateur pour utiliser au mieux les ressources du plateforme utilisé. Cela requiert bien sur une connaissance approfondie d’une part des instructions et d’autre part du processeur utilisé.
 
* élément C L’architecture de la machine :
 
• La taille et le type du cache : Quelques techniques d’optimisations, comme « loop unwiding », permettent d’augmenter la taille du code générer et en même temps vérifier de plus en plus le principe de localité.
Ligne 239 :
 
 
# élément 4 Problèmes avec l’optimisation :
Au début des histoires des compilateurs, leurs optimisations n’ont pas été plus efficaces que l’optimisation manuelle faite par les programmeurs. Et avec l’avancement de la technologie des compilateurs, le résultat est devenu plus efficace qu’une optimisation effectuer par le programmeur. Et ceci est plus évident avec les architectures RISC et les processeurs VLIW (Very Long Instruction Word).