logo

루프 풀기

루프 언롤링은 프로그램의 실행 시간을 최적화하는 데 도움이 되는 루프 변환 기술입니다. 우리는 기본적으로 반복을 제거하거나 줄입니다. 루프 언롤링은 루프 제어 명령과 루프 테스트 명령을 제거하여 프로그램 속도를 높입니다. 프로그램 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