루프 분할

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]

레퍼런스

  1. ^ GCC 7 릴리즈 시리즈 - 변경, 신기능 및 수정 - GNU 프로젝트
  2. ^ 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.
  3. ^ 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.
  4. ^ 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.
  5. ^ 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.

추가 정보