logo

Döngü Açma

Döngü açma, bir programın yürütme süresini optimize etmeye yardımcı olan bir döngü dönüştürme tekniğidir. Temel olarak yinelemeleri kaldırıyoruz veya azaltıyoruz. Döngü açma, döngü kontrol talimatını ve döngü testi talimatlarını ortadan kaldırarak programın hızını artırır. 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 
İllüstrasyon: Program 2, program 1'den daha verimlidir çünkü program 1'de i'nin değerinin kontrol edilmesi ve döngü boyunca her defasında i'nin değerinin arttırılması gerekir. Bunun gibi küçük döngüler veya sabit sayıda yinelemenin söz konusu olduğu döngüler, döngü yükünü azaltmak için tamamen açılabilir.

Avantajları:

  • Programın verimliliğini artırır.
  • Döngü yükünü azaltır.
  • Döngüdeki ifadeler birbirine bağımlı değilse paralel olarak çalıştırılabilirler.

Dezavantajları:

  • İstenmeyen şekilde artan program kodu boyutu.
  • Performansı düşürebilecek geçici değişkenleri depolamak için tek bir yinelemede yazmacın olası artan kullanımı.
  • Çok küçük ve basit kodların dışında, dallar içeren açılmamış döngüler özyinelemelerden bile daha yavaştır.
Referans: https://en.wikipedia.org/wiki/Loop_unrolling