int p = 10 ; for ( int i = 0 ; i < 10 ; ++ i ) { y [ i ] = x [ i ] + x [ p ]; p = i ; }
Division de boucle
int p = 10 ; for ( int i = 0 ; i < 10 ; ++ i ) { y [ i ] = x [ i ] + x [ p ]; p = i ; } Notez que cela p = 10 ne se produit que pour la première itération, et pour toutes les au...
Notez que cela p = 10ne se produit que pour la première itération, et pour toutes les autres, p = i - 1. Un compilateur peut tirer parti de cela en déroulant (ou « déroulant ») la première itération de la boucle.
Après avoir éliminé la première itération, le code ressemblerait à ceci :
Cette forme équivalente élimine le besoin de la variable pà l'intérieur du corps de la boucle.
Le pelage de boucles a été introduit dans gcc dans la version 3.4. Un fractionnement de boucles plus généralisé a été ajouté dans GCC 7.
Bref historique du terme
Il semblerait que le terme « peeling » ait été utilisé pour la première fois par Cannings, Thompson et Skolnick dans leur article de 1976 sur les modèles informatiques de l’hérédité (humaine). Ce terme y désignait une méthode permettant de regrouper les informations phénotypiques sur les parents. Il a ensuite été employé à nouveau dans leurs publications, notamment dans leur article fondateur sur les fonctions de probabilité appliquées aux pedigrees complexes
En matière de technologie des compilateurs, le terme est apparu pour la première fois à la fin des années 1980 dans des articles sur VLIW et la compilation superscalaire.
Pour en savoir plus
- Kennedy, Ken ; Allen, Randy (2002). « Chapitre 5.7. Division des ensembles d'index - Chapitre 5.7.2. Découpage des boucles ». Optimizing Compilers for Modern Architectures: A Dependence-Based Approach (édition numérique de la 1re éd., 2011 ). Academic Press / Morgan Kaufmann Publishers / Elsevier . p. 211-212 . ISBN978-1-55860-286-1. RCAC 2001092381 .