링크 타임 최적화(Link Time Optimization, LTO)는 여러 번역 단위에 걸쳐 수행되는 컴파일러 변환의 모음입니다. 이는 IPO(프로시저 간 최적화)라고도 자주 불립니다. 전통적으로 컴파일러는 하나의 번역 단위 안에서 최적화를 수행합니다. LTO는 많은 함수 호출이 번역 단위 경계를 넘나드는 상황에서 큰 도움이 됩니다. 이 실습에서는 LTO의 효과를 실제로 확인하게 됩니다.
이 연습에 권장하는 작업 순서는 다음과 같습니다.
- 벤치마크를 프로파일링하고 병목 지점을 살펴보십시오.
- LTO를 사용하지 않고 코드를 직접 개선해 보십시오.
- 변경 사항을 되돌리고 대신 LTO(컴파일러 옵션)를 활성화하십시오.
- 프로파일을 다시 확인하여 컴파일러가 어떤 변경을 수행했기에 성능 속도 향상으로 이어졌는지 알아보십시오.
AOBench
이 실습의 코드는 Syoyo Fujita가 처음 작성한 aobench에서 가져왔습니다: https://code.google.com/archive/p/aobench/
라이선스: New BSD License
Performance Ninja를 위한 수정 사항:
- LTO로 해결할 수 있는 성능 문제가 드러나도록 원래의 단일 소스 파일을 여러 파일로 나누었습니다.
- Windows에서는 drand48을 사용할 수 없으므로 직접 구현했습니다.
- 코드를 C 컴파일러가 아닌 C++ 컴파일러로 컴파일하십시오.
- 실행 시간을 줄이기 위해
WIDTH와HEIGHT의 값을 256으로 낮추었습니다.
Co-authored-by: @dendibakh
