logo

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('Hellon'); //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('Hellon');  printf('Hellon');  printf('Hellon');  printf('Hellon');  printf('Hellon');  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:

java string indexof
  • 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.
Referencia: https://en.wikipedia.org/wiki/Loop_unrolling