Loop Unrolling
A hurokfelbontás egy huroktranszformációs technika, amely segít optimalizálni a program végrehajtási idejét. Alapvetően eltávolítjuk vagy csökkentjük az iterációkat. A huroktekercselés növeli a program sebességét azáltal, hogy kiküszöböli a hurokvezérlési utasításokat és a hurokteszt utasításokat. 1. program: CPP
// This program does not uses loop unrolling. #include int main ( void ) { for ( int i = 0 ; i < 5 ; i ++ ) printf ( 'Hello n ' ); //print hello 5 times return 0 ; }
2. program: CPP // This program uses loop unrolling. #include int main ( void ) { // unrolled the for loop in program 1 printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); return 0 ; }
Output: Hello Hello Hello Hello HelloÁbra: A 2. program hatékonyabb, mint az 1. program, mert az 1. programban ellenőrizni kell az i értékét, és a ciklus során minden alkalommal növelni kell az i értékét. Így az ehhez hasonló kis hurkokat vagy a rögzített számú iterációt tartalmazó hurkokat teljesen letekerhetjük, hogy csökkentsük a hurok többletköltségét.
Előnyök:
- Növeli a program hatékonyságát.
- Csökkenti a hurok terhelését.
- Ha a ciklusban lévő utasítások nem függenek egymástól, akkor párhuzamosan is végrehajthatók.
Hátrányok:
- Megnövekedett programkód mérete, ami nemkívánatos lehet.
- A regiszterek lehetséges fokozott használata egyetlen iterációban ideiglenes változók tárolására, amelyek csökkenthetik a teljesítményt.
- A nagyon kicsi és egyszerű kódoktól eltekintve az elágazásokat tartalmazó kigöngyölt hurkok még a rekurzióknál is lassabbak.