What information does GCC Profile Guided Optimization (PGO) collect and which optimizations use it?
-fprofile-generate
enables -fprofile-arcs
, -fprofile-values
and -fvpt
.
-fprofile-use
enables -fbranch-probabilities
, -fvpt
, -funroll-loops
, -fpeel-loops
and -ftracer
Source: http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Optimize-Options.html#Optimize-Options
PS. Information about LTO also on that page.
Are the PGO (Profile Guided Optimization) tools available in Visual Studio 2019 Community Edition?
According to the comment made in the demo video (in 2012) it is only available in Pro-plus SKUs of Visual Studio.
An alternative is to use GCC which has PGO features.
The risks of using PGO (profile-guided optimization) with production environment
Microsoft has system that is modifying conditional jumps based on the usage statistics plus it condenses frequently used pieces of code into smaller number of pages. This essentially compacts effective memory footprint several times and reduces CPU consumption for 20-50%.
This system was extensively used both in user and in kernel mode. The quality of this system was very high. In 100% of cases it was doing its job correctly. I do not see even minor down sides.
It might happen that some other similar system might be less reliable than that of Microsoft. That one from Microsoft was extremely good.
Related Topics
Why am I Getting String Does Not Name a Type Error
Declare Variables at Top of Function or in Separate Scopes
Compiling Qt 4.8.X for Visual Studio 2012
Multithreaded Memory Allocators for C/C++
How to Check If the Program Is Run from a Console
Compiling Cuda Code in Qt Creator on Windows
Why Does Using a Temporary Object in the Range-Based for Initializer Result in a Crash
C++11: Number of Variadic Template Function Parameters
Is There Any Alternative to Using % (Modulus) in C/C++
Should I Delete the Move Constructor and the Move Assignment of a Smart Pointer
Why Use Precompiled Headers (C/C++)
Cmake - Remove a Compile Flag for a Single Translation Unit
Why Is 'Std::Initializer_List' Often Passed by Value
Round Double to 3 Points Decimal
Forwarding All Constructors in C++0X
How to Do the Equivalent of Memset(This, ...) Without Clobbering the Vtbl