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 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 Vytvořit kvíz