Rozvinování smyčky
Rozbalování smyčky je technika transformace smyčky, která pomáhá optimalizovat dobu provádění programu. V zásadě odstraňujeme nebo omezujeme iterace. Rozvinování smyčky zvyšuje rychlost programu tím, že eliminuje instrukce pro řízení smyčky a instrukce pro testování smyč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 HelloIlustrace: Program 2 je efektivnější než program 1, protože v programu 1 je potřeba kontrolovat hodnotu i a zvyšovat hodnotu i při každém cyklu smyčky. Takže malé smyčky, jako je tato, nebo smyčky, kde je zahrnut pevný počet iterací, lze úplně rozvinout, aby se snížila režie smyčky.
výhody:
- Zvyšuje efektivitu programu.
- Snižuje režii smyčky.
- Pokud příkazy ve smyčce na sobě nejsou závislé, lze je provádět paralelně.
Nevýhody:
- Zvětšená velikost programového kódu, což může být nežádoucí.
- Možné zvýšené využití registru v jedné iteraci pro ukládání dočasných proměnných, což může snížit výkon.
- Kromě velmi malých a jednoduchých kódů jsou rozvinuté smyčky, které obsahují větve, ještě pomalejší než rekurze.