next up previous
Next: 2.2.2 Optimisations liées à Up: 2.2.1 Code de contrôle Previous: Déplacement de code

Reconnaissance des tests cachés


De nombreux algorithmes nécessitent une utilisation intensive de code de contrôle (notamment sous forme de boucles imbriquées Do i=lb,ub ... ). Afin d'éviter certains parcours inutiles, il est parfois intéressant d'ajouter le test if (si cette condition n'est pas respectée, le corps de la boucle n'est de toutes façons pas exécuté) et de le remonter au plus tôt pour stopper le parcours si nécessaire. Ceci permet alors d'éviter l'évaluation inutile des indices de boucles et autres tests imbriqués.

De plus, il arrive dans certains cas qu'une boucle se comporte en fait comme un test: le corps de la boucle ne sera évalué que selon une certaine condition sur les bornes. Donc, si nous arrivons à montrer que , alors nous pouvons remplacer la boucle par une simple affectation de l'indice ( Do i=lb,ub devient alors if then ). Sur l'exemple de la figure 3, nous pouvons remplacer les boucles sur les indices et par deux tests et deux affectations équivalents. Les deux tests ainsi qu'une affectation seront remontés d'un ou plusieurs niveaux de boucles (le résultat est proposé figure 4). Cette modification a permis d'obtenir un gain de 5 sur l'exécution de cet algorithme (redistribution de matrices dans le cadre de la compilation du langage High Performance Fortran [12]).

  
Figure 3: Exemple d'énumération tiré d'un algorithme de redistribution.

  
Figure 4: Exemple d'énumération - après reconnaissance des tests cachés.



Julien Zory
Thu Mar 12 17:35:23 MET 1998