Jason JAMET
III. Mesure simpliste dépliage
1 Explication
Afin d'améliorer la fonction simpliste, le dépliage de boucle me semblais nécessaire.
Grâce à cette méthode, un nombre significatif de « jump » peut être économisé, l'instruction
« jump » étant très gourmande en ressources (obligation de push et pop tous les registres), c'est
toute la fonction qui ce verrais fortement optimisée.
Un dépliage par 4 me semble correct, au delà, l'optimisation est tellement faible qu'elle en deviens
caduc.
De plus l'instruction « cmove » (conditionnal move) me permet de ne pas passer par le label « incs »
, cette opération économise 2 sauts par passage de boucle.
2 Étapes de cette traduction
•Initialisation des variables.
•Création d'un label « for » (correspondant a la boucle for).
•Placement de compteur+1 dans edx.
•Comparaison d'un caractère avec un autre caractère (grâce à ah et al).
•Si égaux placement de edx dans compteur(ebx)
•Retour au for
•Une fois la boucle terminée on divise le compteur par la taille totale des chaînes, grâce a des
instructions coprocesseurs.
reference simpliste _depliage
0 ; 16 ; 0.24 2 ; 16 ; 0.16
0 ; 255 ; 3.97 2 ; 255 ; 2.04
0 ; 511 ; 7.78 2 ; 511 ; 4.09
0 ; 1023 ; 15.79 2 ; 1023 ; 8.26
0 ; 2047 ; 31.14 2 ; 2047 ; 16.24
0 ; 4095 ; 63.06 2 ; 4095 ; 32.95
0 ; 8191 ; 125.59 2 ; 8191 ; 64.52
Nous obtenons un rendement environ 2 fois supérieur a la fonction de référence.
4/7 15/10/13