logo

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('Hellon'); //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('Hellon');  printf('Hellon');  printf('Hellon');  printf('Hellon');  printf('Hellon');  return 0; }  
Output:
Hello Hello Hello Hello Hello 
Ilustrace: 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.
Odkaz: https://cs.wikipedia.org/wiki/Loop_unrolling