Rozvíjanie slučky
Rozvíjanie slučky je technika transformácie slučky, ktorá pomáha optimalizovať čas vykonávania programu. V podstate odstraňujeme alebo redukujeme iterácie. Rozvíjanie slučky zvyšuje rýchlosť programu odstránením inštrukcií riadenia slučky a inštrukcií na testovanie slučky. Program 1: 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 ; }
Program 2: 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 HelloIlustrácia: Program 2 je efektívnejší ako program 1, pretože v programe 1 je potrebné kontrolovať hodnotu i a zvyšovať hodnotu i zakaždým, keď cyklus. Takže malé slučky, ako je táto, alebo slučky, v ktorých je zahrnutý pevný počet iterácií, možno úplne rozvinúť, aby sa znížila réžia slučky.
Výhody:
- Zvyšuje efektivitu programu.
- Znižuje réžiu slučky.
- Ak príkazy v slučke nie sú na sebe závislé, môžu sa vykonávať paralelne.
Nevýhody:
- Zväčšená veľkosť programového kódu, čo môže byť nežiaduce.
- Možné zvýšené využitie registra v jednej iterácii na ukladanie dočasných premenných, čo môže znížiť výkon.
- Okrem veľmi malých a jednoduchých kódov sú rozvinuté slučky, ktoré obsahujú vetvy, ešte pomalšie ako rekurzie.