Search Results for 'loop unrolling'

1 POSTS

  1. 2006.09.13 Loop Unrolling(unwinding) 1

Loop Unrolling(unwinding)

Posted 2006. 9. 13. 01:31
직관적으로 쉽게 이해할 수 있는 최적화 중에 하나는 루프를 푸는 loop unrolling이 있다.

Loop: 루프를 100번 돈다
for (i = 0; i < 100; i++)
  g ();

Unrolled loop : 루프를 50번 돈다
for (i = 0; i < 100; i += 2)
{
  g ();
  g ();
}

g()를 두 번 실행하지만 루프의 길이는 반으로 줄였다. 이 최적화의 기본 아이디어는 루프를 실행하는데 드는 오버헤드를 줄이는데 있다. 루프는 loop condition을 검사하고 jump하는 오버헤드가 있기 때문에 루프 수를 줄이면 branching을 줄이고 cache hit ratio를 높여주는 효과가 있다.

물론 다음과 같은 부작용도 있다.

1) 코드 사이즈의 증가

2) 루프가 길어지면서 레지스터 사용량이 증가 (결국 일부가 spill out 됨)