logo

Loop Развиване

Loop unrolling е техника за трансформация на цикъл, която помага да се оптимизира времето за изпълнение на програма. Ние основно премахваме или намаляваме итерациите. Развиването на цикъла увеличава скоростта на програмата, като елиминира инструкциите за контрол на цикъла и инструкциите за тестване на цикъла. Програма 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; }  
Програма 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 
Илюстрация: Програма 2 е по-ефективна от програма 1, защото в програма 1 има нужда да се проверява стойността на i и да се увеличава стойността на i всеки път, когато се обикаля цикълът. Така че малки цикли като този или цикли, при които има включен фиксиран брой итерации, могат да бъдат разгърнати напълно, за да се намали натоварването на цикъла.

Предимства:

  • Повишава ефективността на програмата.
  • Намалява разходите за цикъл.
  • Ако изразите в цикъл не зависят един от друг, те могат да се изпълняват паралелно.

Недостатъци:

  • Увеличен размер на програмния код, който може да бъде нежелан.
  • Възможно повишено използване на регистър в една итерация за съхраняване на временни променливи, което може да намали производителността.
  • Освен много малки и прости кодове, развитите цикли, които съдържат разклонения, са дори по-бавни от рекурсиите.
Справка: https://en.wikipedia.org/wiki/Loop_unrolling