logo

Kilpos išvyniojimas

Ciklo išvyniojimas yra kilpos transformavimo technika, padedanti optimizuoti programos vykdymo laiką. Iš esmės pašaliname arba sumažiname iteracijas. Kilpos išvyniojimas padidina programos greitį, pašalindamas kilpos valdymo instrukcijas ir kilpos tikrinimo instrukcijas. 1 programa: 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 programa: 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 
Iliustracija: 2 programa yra efektyvesnė nei 1 programa, nes 1 programoje reikia patikrinti i reikšmę ir padidinti i reikšmę kiekvieną kartą ciklo metu. Taigi mažos kilpos, tokios kaip ši, arba kilpos, kuriose dalyvauja fiksuotas iteracijų skaičius, gali būti visiškai išvyniotos, kad būtų sumažinta kilpa.

Privalumai:

  • Padidina programos efektyvumą.
  • Sumažina kilpos viršų.
  • Jei ciklo teiginiai nepriklauso vienas nuo kito, jie gali būti vykdomi lygiagrečiai.

Trūkumai:

  • Padidėjęs programos kodo dydis, kuris gali būti nepageidautinas.
  • Galimas didesnis registro naudojimas per vieną iteraciją laikiniems kintamiesiems saugoti, o tai gali sumažinti našumą.
  • Be labai mažų ir paprastų kodų, išvyniotos kilpos, kuriose yra šakų, yra net lėtesnės nei rekursijos.
Nuoroda: https://en.wikipedia.org/wiki/Loop_unrolling