Profile-guided optimization
Profile-guided optimization (PGO) (sometimes pronounced as pogo,[1] also known as profile-directed feedback PDF[2]) is a compiler optimization technique in computer programming that uses profiling to improve program runtime performance.
Method
In contrast to traditional optimization techniques that solely use the source code, PGO uses the results of profiling test runs of the instrumented program to optimize the final generated code.[3][4] The compiler is used to access data from a sample run of the program across a representative input set. The data indicates which areas of the program are executed more frequently, and which areas are executed less frequently. All optimizations benefit from profile-guided feedback because they are less reliant on heuristics when making compilation decisions. The caveat, however, is that the sample of data fed to the program during the profiling stage must be statistically representative of the typical usage scenarios; otherwise, profile-guided feedback has the potential to harm the overall performance of the final build instead of improving it.
Adoption
There is support for building Firefox using PGO.[5] Even though PGO is effective, it has not been widely adopted by software projects, due to its tedious dual-compilation model.[6] It is also possible to perform PGO without instrumentation by collecting a profile using hardware performance counters.[6] This sampling-based approach has a much lower overhead and does not require a special compilation.
Implementations
Examples of compilers that implement PGO are:
- Intel C++ Compiler and Fortran compilers,[3]
- GNU Compiler Collection compilers
- Oracle Solaris Studio (formerly called Sun Studio)
- Microsoft Visual C++ compiler[1]
See also
- Adaptive optimization
- Dynamic program analysis
- Global optimization
- Hot spot (computer programming)
- Interprocedural optimization
- Whole program optimization
References
- ↑ 1.0 1.1 "Microsoft Visual C++ Team Blog".
- ↑ "Profile-directed feedback (PDF)". Retrieved 2013-11-23.
- ↑ 3.0 3.1 Optimization "Intel Fortran Compiler 10.1, Professional and Standard Editions, for Mac OS X".
- ↑ "Profile-Guided Optimization (PGO) Quick Reference".
- ↑
- ↑ 6.0 6.1 Dehao Chen (2010). "Taming hardware event samples for fdo compilation", Proceedings of the 8th annual IEEE/ACM international symposium on Code generation and optimization, pp. 42–52.