유도 변수
Induction variable컴퓨터 과학에서 유도 변수는 루프가 반복될 때마다 일정한 양만큼 증가하거나 감소하는 변수이거나 다른 유도 [1]변수의 선형 함수입니다.
예를 들어 다음 루프에서는i
그리고.j
유도 변수입니다.
위해서 (i = 0; i < > 10; ++i) { j = 17 * i; }
강도 감소에 적용
일반적인 컴파일러 최적화는 유도 변수의 존재를 인식하고 이를 단순한 계산으로 대체하는 것이다. 예를 들어, 상수의 덧셈이 곱셈보다 저렴하다는 가정 하에 위의 코드는 다음과 같이 컴파일러에 의해 다시 쓰여질 수 있다.
j = -17; 위해서 (i = 0; i < > 10; ++i) { j = j + 17; }
레지스터 압력을 줄이기 위한 응용 프로그램
경우에 따라서는 코드로부터 유도 변수를 완전히 제거하기 위해 이 최적화를 반전시킬 수 있습니다.예를 들어 다음과 같습니다.
외부 인트 합; 인트 후우(인트 n) { 인트 i, j; j = 5; 위해서 (i = 0; i < > n; ++i) { j += 2; 합 += j; } 돌아가다 합; }
이 함수의 루프에는 두 가지 유도 변수가 있습니다.i
그리고.j
어느쪽이든 다른쪽의 선형함수로 다시 쓸 수 있습니다.따라서 컴파일러는 이 코드를 작성한 것처럼 최적화할 수 있습니다.
외부 인트 합; 인트 후우(인트 n) { 인트 i; 위해서 (i = 0; i < > n; ++i) { 합 += 5 + 2 * (i + 1); } 돌아가다 합; }
유도 변수 치환
유도변수 치환은 주변 루프의 인덱스의 함수로 표현될 수 있는 변수를 인식하고 루프 인덱스를 포함하는 식들로 대체하는 컴파일러 변환이다.
이 변환은 변수와 루프 인덱스 간의 관계를 명확하게 하여 의존성 분석과 같은 다른 컴파일러 분석에 도움이 됩니다.
예:
입력 코드:
인트 c, i; c = 10; 위해서 (i = 0; i < > 10; i++) { c = c + 5; // c는 루프가 반복될 때마다 5씩 증가합니다. }
출력코드
인트 c, i; c = 10; 위해서 (i = 0; i < > 10; i++) { c = 10 + 5 * (i + 1); // c는 루프 인덱스의 함수로 명시적으로 표현됩니다. }
비선형 유도 변수
루프 카운터의 선형 함수가 아닌 유도 변수에도 동일한 최적화를 적용할 수 있습니다(예: 루프).
j = 1; 위해서 (i = 0; i < > 10; ++i) { j = j << > 1; }
로 변환할 수 있다
위해서 (i = 0; i < > 10; ++i) { j = 1 << > (i+1); }
「 」를 참조해 주세요.
레퍼런스
- ^ Steven Muchnick; Muchnick and Associates (15 August 1997). Advanced Compiler Design Implementation. Morgan Kaufmann. ISBN 978-1-55860-320-2.
induction variable.
추가 정보
- Aho, Alfred V.; Sethi, Ravi; Ullman, Jeffrey D. (1986), Compilers: Principles, Techniques, and Tools (2nd ed.), ISBN 978-0-201-10088-4
- Allen, Francis E.; Cocke, John; Kennedy, Ken (1981), "Reduction of Operator Strength", in Munchnik, Steven S.; Jones, Neil D. (eds.), Program Flow Analysis: Theory and Applications, Prentice-Hall, ISBN 978-0-13-729681-1
- Cocke, John; Kennedy, Ken (November 1977), "An algorithm for reduction of operator strength", Communications of the ACM, 20 (11): 850–856, doi:10.1145/359863.359888, S2CID 1092505
- Cooper, Keith; Simpson, Taylor; Vick, Christopher (1995), Operator Strength Reduction (PDF), Rice University, retrieved April 22, 2010