Opdeling af løkkekroppen

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 20. maj 2013; checks kræver 13 redigeringer .

Loop fission er en compiler-optimering , der opdeler en loop i et program i flere loops, som hver har de samme indeksgrænser, men kun indeholder en del af kroppen af ​​den originale loop . 

For eksempel følgende kode :

int i , a [ 100 ], b [ 100 ]; for ( i = 0 ; i < 100 ; i ++ ) { a [ i ] = 1 ; b [ i ] = 2 ; }

som et resultat af at anvende optimeringen konverteres til:

int i , a [ 100 ], b [ 100 ]; for ( i = 0 ; i < 100 ; i ++ ) { a [ i ] = 1 ; } for ( i = 0 ; i < 100 ; i ++ ) { b [ i ] = 2 ; }

Hovedformålet med sådanne optimeringer er at reducere antallet af sløjfeoperationer. Her er den vigtigste optimeringsmetode at opdele løkken i flere løkker, for hver af hvilke antallet af instruktioner, der kræves for at pakke løkkelegemet, er strengt taget mindre end antallet af instruktioner for den originale løkke.

Distribution er nyttig til at isolere datasløjfeafhængigheder som forberedelse til sløjfevektorisering , til sløjfepermutationer eller til at forbedre lokaliteten ved at reducere den samlede mængde data, der refereres til i hver sløjfe.

Noter

Se også

Litteratur

  • Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. Compilers : Principles, Techniques and Tools = Compilers: Principles, Techniques and Tools. — 2. udgave. - M . : "Williams", 2008. - 1184 s. - 1500 eksemplarer.  - ISBN 978-5-8459-1349-4 .
  • Steven S. Muchnick. Avanceret compilerdesign og implementering. — 5. udgave. - San Francisco: Morgan Kaufmann Publishers , 1997. - 856 s. - ISBN 1-55860-320-4 .
  • Kennedy, Ken; & Allen, Randy. Optimering af kompilatorer til moderne arkitekturer: En afhængighedsbaseret tilgang  . - Morgan Kaufmann , 2001. - ISBN 1-55860-286-0 .