Search code examples
c++coptimizationgccpgo

profile-guided optimization (C)


Anyone know this compiler feature? It seems GCC support that. How does it work? What is the potential gain? In which case it's good? Inner loops?

(this question is specific, not about optimization in general, thanks)


Solution

  • It works by placing extra code to count the number of times each codepath is taken. When you compile a second time the compiler uses the knowledge gained about execution of your program that it could only guess at before. There are a couple things PGO can work toward:

    • Deciding which functions should be inlined or not depending on how often they are called.
    • Deciding how to place hints about which branch of an "if" statement should be predicted on based on the percentage of calls going one way or the other.
    • Deciding how to optimize loops based on how many iterations get taken each time that loop is called.

    You never really know how much these things can help until you test it.