Dela slingkroppen

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 20 maj 2013; kontroller kräver 13 redigeringar .

Loop fission är en kompilatoroptimering som delar upp en loop i ett program i flera loopar, som var och en har samma indexgränser, men som bara innehåller en del av den ursprungliga loopens kropp . 

Till exempel följande kod :

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

som ett resultat av att tillämpa optimeringen konverteras till:

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

Huvudsyftet med sådana optimeringar är att minska antalet loopoperationer. Här är den huvudsakliga optimeringsmetoden att dela slingan i flera slingor, för var och en av vilka antalet instruktioner som krävs för att packa slingkroppen är strikt mindre än antalet instruktioner för den ursprungliga slingan.

Distribution är användbar för att isolera dataloopberoenden som förberedelse för loopvektorisering , för looppermutationer eller för att förbättra lokaliteten genom att minska den totala mängden data som refereras till i varje loop.

Anteckningar

Se även

Litteratur

  • Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. Compilers : Principles, Techniques and Tools = Compilers: Principles, Techniques and Tools. — 2:a upplagan. - M . : "Williams", 2008. - 1184 sid. - 1500 exemplar.  - ISBN 978-5-8459-1349-4 .
  • Steven S. Muchnick. Avancerad kompilatordesign och implementering. — 5:e upplagan. - San Francisco: Morgan Kaufmann Publishers , 1997. - 856 sid. - ISBN 1-55860-320-4 .
  • Kennedy, Ken; & Allen, Randy. Optimera kompilatorer för moderna arkitekturer: en beroendebaserad metod  . - Morgan Kaufmann , 2001. - ISBN 1-55860-286-0 .