프로필 안내 최적화
Profile-guided optimization프로파일-유도 최적화(PGO, 때로는 pogo로[1] 발음하기도 함), 프로파일-방향 피드백(PDF),[2] 피드백-방향 최적화(FDO)[3]는 컴퓨터 프로그래밍에서 프로그램 런타임 성능을 향상시키기 위해 프로파일링을 사용하는 컴파일러 최적화 기법이다.
방법
소스 코드의 정적 프로그램 분석에 기초한 최적화 기법은 프로그램을 실제로 실행하지 않고 코드 성능 향상을 고려한다.동적 프로그램 분석을 수행하지 않는다.이 분석에서는 루프가 실행될 횟수를 포함하여 루프 내의 코드(예: 루프가 롤링되지 않는 경우)도 고려할 수 있다.모든 실행 시간 정보가 없는 경우, 정적 프로그램 분석은 코드 섹션이 실제로 실행되는 빈도를 고려할 수 없다.
1957년 포트란 자동 부호화시스템으로 도입된 첫 번째 고급 컴파일러는 코드를 블록으로 깨고 조건부 전송 결과가 (이를 통해) 몬테카를로 방식으로 코드의 시뮬레이션 실행을 통해 각 블록이 실행되는 주파수 표를 고안했다.IF
-형식문)은 임의의 방법으로 적절한 가중치를 부여한 난수 생성기에 의해 결정된다.FREQUENCY
문장은 프로그래머에 의해 제공되었다.[4]
프로그래머가 제공하는 주파수 정보보다는, 프로파일 가이드 최적화는 최종 생성된 코드를 최적화하기 위해 계측된 프로그램의 프로파일링 테스트 실행 결과를 사용한다.[5][6][7] 컴파일러는 대표적인 입력 세트에 걸쳐 프로그램의 샘플 실행에서 프로필 데이터에 액세스한다.그 결과는 프로그램의 어떤 영역이 더 자주 실행되며 어떤 영역이 덜 실행되는지를 나타낸다.모든 최적화는 컴파일 결정을 내릴 때 경험적 접근에 덜 의존하기 때문에 프로파일-유도 피드백으로부터 이익을 얻는다.그러나, 주의할 점은 프로파일링 단계에서 프로그램에 공급되는 데이터 샘플이 일반적인 사용 시나리오를 통계적으로 대표해야 한다는 것이다. 그렇지 않으면 프로파일 가이드 피드백은 최종 빌드의 전반적인 성능을 향상시키는 대신 해칠 가능성이 있다.
Just-in-time 컴파일에서는 실행된 코드의 일부를 동적으로 컴파일하여 보다 효율적인 네이티브 코드를 생성할 수 있다.실행 중에 동적 프로필이 변경되면 이전 네이티브 코드를 최적화하지 않고 새 프로필의 정보로 최적화된 새 코드를 생성할 수 있다.
입양
PGO를 이용한 Firefox 구축에 대한 지원이 있다.[8]PGO는 효과적이지만 지루한 이중 컴파일 모델 때문에 소프트웨어 프로젝트에서 널리 채택되지 못했다.[9]하드웨어 성능 카운터를 이용해 프로필을 수집해 계측 없이 PGO를 수행하는 것도 가능하다.[9]이 샘플링 기반 접근법은 오버헤드가 훨씬 낮으며 특별한 컴파일이 필요하지 않다.
HotSpot Java 가상 머신(JVM)은 프로필 안내 최적화를 사용하여 네이티브 코드를 동적으로 생성한다.결과적으로, 소프트웨어 바이너리는 그것이 받고 있는 실제 부하에 최적화된다.부하가 변경되면 적응 최적화는 실행 중인 소프트웨어를 동적으로 재구성하여 새로운 부하에 맞게 최적화할 수 있다.즉, HotSpot JVM에서 실행되는 모든 소프트웨어는 프로파일 가이드 최적화를 효과적으로 활용한다.[10]
PGO는 마이크로소프트 윈도 버전의 구글 크롬에서 채택되었다.PGO는 버전 53으로 시작하는 크롬 64비트 버전과 32비트 버전 54에서 활성화되었다.[11]
구현
PGO를 구현하는 컴파일러의 예는 다음과 같다.
- Intel C++ 컴파일러 및 Fortran 컴파일러[6]
- GNU 컴파일러 수집 컴파일러
- Oracle Solaris Studio(이전의 Sun Studio)
- Microsoft Visual C++ 컴파일러[1][12]
- 클랑[13]
- IBM XL C/C++[14]
참고 항목
- 적응 최적화
- 동적 데드 코드 제거
- 글로벌 최적화
- 핫 스폿(컴퓨터 프로그래밍)
- 절차간 최적화
- 링크 시간 최적화(LTO)
- 적시 컴파일 추적
참조
- ^ a b "Microsoft Visual C++ Team Blog".
- ^ "Profile-directed feedback (PDF)". XL C/C++ for AIX. Retrieved 23 November 2013.
{{cite web}}
: CS1 maint : url-status (링크) - ^ Baptiste Wicht, Roberto A. Vitillo, Dehao Chen, David Levinthal (24 November 2014). "Hardware Counted Profile-Guided Optimization". arXiv:1411.6361. Bibcode:2014arXiv1411.6361W.
{{cite journal}}
:Cite 저널은 필요로 한다.journal=
(도움말)CS1 maint: 작성자 매개변수 사용(링크) - ^ J. W. 백커스, R. J. 비버 등포트란 자동 부호화 시스템, 1957년 2월 서부합동 컴퓨터 회의의 진행
- ^ "K. Pettis, R. Hansen, Profile Guided Code Positioning, ACM SIGPLAN Programming Language Design and Implementation Conference 1990" (PDF).
- ^ a b "Intel Fortran Compiler 10.1, Professional and Standard Editions, for Mac OS X". Archived from the original on 28 September 2013.
- ^ "Profile-Guided Optimization (PGO) Quick Reference".
- ^ 프로파일 가이드 최적화를 통한 빌딩, mozilla.org, 2013년 8월 13일
- ^ a b Dehao Chen(2010), "fdo 컴파일을 위한 하드웨어 이벤트 샘플 길들이기", 제8회 연례 IEEE/ACM 국제 심포지엄의 진행, 페이지 42~52.
- ^ Ivanov, Vladimir (25 July 2013). "JVM JIT compilation overview". Retrieved 10 September 2016.
- ^ Marchand, Sébastien (31 October 2016). "Making Chrome on Windows faster with PGO". Archived from the original on 1 November 2016. Retrieved 1 November 2016.
- ^ "Profile-guided optimizations[VS 2019]".
{{cite web}}
: CS1 maint : url-status (링크) - ^ "Profile-guided optimization [Clang Compiler User's Manual]".
{{cite web}}
: CS1 maint : url-status (링크) - ^ Quintero, Dino; Chabrolles, Sebastien; Chen, Chi Hui; Dhandapani, Murali; Holloway, Talor; Jadhav, Chandrakant; Kim, Sae Kee; Kurian, Sijo; Raj, Bharath; Resende, Ronan; Roden, Bjorn; Srinivasan, Niranjan; Wale, Richard; Zanatta, William; Zhang, Zhi; Redbooks, I. B. M. (1 May 2013). IBM Power Systems Performance Guide: Implementing and Optimizing. IBM Redbooks. ISBN 9780738437668 – via Google Books.