루프 풀기
루프 언롤링은 프로그램의 실행 시간을 최적화하는 데 도움이 되는 루프 변환 기술입니다. 우리는 기본적으로 반복을 제거하거나 줄입니다. 루프 언롤링은 루프 제어 명령과 루프 테스트 명령을 제거하여 프로그램 속도를 높입니다. 프로그램 1: CPP
// This program does not uses loop unrolling. #include int main ( void ) { for ( int i = 0 ; i < 5 ; i ++ ) printf ( 'Hello n ' ); //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 ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); return 0 ; }
Output: Hello Hello Hello Hello Hello삽화: 프로그램 2는 프로그램 1보다 효율적입니다. 왜냐하면 프로그램 1에서는 루프를 돌 때마다 i 값을 확인하고 i 값을 증가시켜야 하기 때문입니다. 따라서 이와 같은 작은 루프나 반복 횟수가 고정된 루프는 완전히 펼쳐서 루프 오버헤드를 줄일 수 있습니다.
장점:
- 프로그램 효율성을 높입니다.
- 루프 오버헤드를 줄입니다.
- 루프의 문이 서로 종속되지 않으면 병렬로 실행될 수 있습니다.
단점:
- 바람직하지 않을 수 있는 증가된 프로그램 코드 크기.
- 성능을 저하시킬 수 있는 임시 변수를 저장하기 위해 단일 반복에서 레지스터 사용이 증가할 수 있습니다.
- 매우 작고 간단한 코드 외에도 분기를 포함하는 펼쳐진 루프는 재귀보다 훨씬 느립니다.