2008년 7월 30일 수요일

ARM 효과적인 루프문의 코딩

■ 0으로 다운카운트를 하는 루트를 사용하도록 한다. 그러면 컴파일러는 최종값을 저장하기 위해 레지스터를 할당할 필요가 없으며, 0과 비교하는 작업에 비용이 들지 않는다.

■ 디폴트로 unsigned 루트 카운터를 사용하고, 반복 조건으로 i>0보다는 i!=0을 사용하도록 한다. 그러면 루프 오버헤드는 명령어 2개로 줄어든다.

■루프가 적어도 한 번 이상 실행된다면 for문보다는 do-while 문을 사용하도록 한다. 이것은 컴파일러가 루프 카운터가 0인지 아닌지를 체크할 필요성을 없애준다.

■ 루프 오버헤드를 줄어여 하는 중요한 루프문은 언롤링시키도록 한다. 그렇다고 언롤링을 너무 맣이 하지는 않도록 한다. 만약 루프 오버헤드가 전체의 일정 비율만큼 작아진다면, 언롤링은 코드사이즈를 증가시키고 캐시 성능에 좋지 않은 영향을 끼칠 것이다.

■배열에서 요소(element)들의 수는 4나 8의 배수가 되도록 정렬시키도록 한다. 그러면 배열 요소를 추가해야 할 지에 대해 고민하지 않고 루프를 2,4,8배로 쉽게 언롤링 시킬수 있다.

댓글 없음: