루프 분할
Loop splitting루프 분할은 컴파일러 최적화 기술입니다.같은 본체를 가지지만 인덱스 범위의 서로 다른 인접 부분에 걸쳐 반복되는 여러 루프로 분할함으로써 루프를 단순화하거나 종속성을 제거하려고 합니다.
루프 필링
루프 박리는 문제가 있는 첫 번째(또는 마지막) 몇 번의 반복을 루프에서 분리하여 루프 본체 밖에서 실행하는 루프 분할의 특수한 경우입니다.
루프가 다음과 같이 쓰여져 있다고 가정합니다.
인트 p = 10; 위해서 (인트 i=0; i< >10; ++i) { y[i] = x[i] + x[p]; p = i; }
주의해 주세요p = 10
첫 번째 반복과 다른 모든 반복에 대해서만p = i - 1
컴파일러는 루프에서 첫 번째 반복을 풀어서(또는 "필링"함으로써) 이것을 이용할 수 있습니다.
첫 번째 반복을 삭제한 후 코드는 다음과 같습니다.
y[0] = x[0] + x[10]; 위해서 (인트 i=1; i< >10; ++i) { y[i] = x[i] + x[i-1]; }
이 등가 양식은 변수의 필요성을 없애줍니다.p
루프 본체 내부에 있습니다.
루프 필링은 버전 3.4에서 gcc에 도입되었습니다.GCC [1]7에서는 보다 일반적인 루프 분할이 추가되었습니다.
용어의 간단한 역사
캐닝스, 톰슨, 스콜닉이[2] 1976년 인간 유전의 계산 모델에 관한 논문에서 이 용어를 처음으로 사용한 것으로 보인다.그 용어는 부모에게 표현형 정보를 붕괴시키는 방법을 나타내기 위해 사용되었다.거기서부터 복잡한 [3]혈통에 대한 확률 함수에 대한 그들의 중요한 논문을 포함하여, 그 용어들이 그들의 논문에서 다시 사용되었다.
컴파일러 기술에서 이 용어는 1980년대 후반의 VLIW 및 슈퍼스칼라 컴파일에 관한 논문에서 처음 등장했습니다.[5]
레퍼런스
- ^ GCC 7 릴리즈 시리즈 - 변경, 신기능 및 수정 - GNU 프로젝트
- ^ Cannings, C.; Thompson, E. A.; Skolnick, H. H. (1976). "The recursive derivation of likelihoods on complex pedigrees". Advances in Applied Probability. 8 (4): 622–625. doi:10.2307/1425918. JSTOR 1425918.
- ^ Cannings, C.; Thompson, E. A.; Skolnick, H. H. (1978). "Probability functions on complex pedigrees". Advances in Applied Probability. 10 (1): 26–61. doi:10.2307/1426718. JSTOR 1426718.
- ^ Callahan, D.; Kennedy, Ken (1988). "Compiling Programs for Distributed-memory Multiprocessors". The Journal of Supercomputing. 2 (2): 151–169. doi:10.1007/BF00128175. S2CID 10214341.
- ^ Mahlke, S. A.; Lin, D. C.; Chen, W. Y.; Hank, R. E.; Bringman, R. A. (1992). Effective compiler support for predicated execution using the hyperblock. 25th Annual International Symposium on Microarchitecture. pp. 45–54.
추가 정보
- Kennedy, Ken; Allen, Randy (2002). "Chapter 5.7. Index-Set Splitting - Chapter 5.7.2. Loop Peeling". Optimizing Compilers for Modern Architectures: A Dependence-Based Approach (2011 digital print of 1st ed.). Academic Press / Morgan Kaufmann Publishers / Elsevier. pp. 211–212. ISBN 978-1-55860-286-1. LCCN 2001092381.