Profile-guided optimization
Profile-guided optimization (PGO, оптимизация по профилю) — техника оптимизации программного кода, которая использует информацию профилилировщика для выбора решений оптимизатором компилятора. Например, в данном примере
/**************************************************************************** * File: PgoExample.c * * Description: Used to demonstrate the basic operation of Profile * Guided Optimization. * * Read incoming data from address 0xFFD00000 and count the * number of even values and odd values. Supplying data files * with varying numbers of odd values vs. even values will * direct the compiler to optimize the conditional statement * with a bias for the branch most likely to be taken. ****************************************************************************/ unsigned int odds = 0; unsigned int evens = 0; volatile int* data = (volatile int*)0xFFD00000; int main( int argc, char* argv[] ) { int i; for( i=0; i<256; i++ ) { if( (*data & 0xff) % 2 != 0 ) { odds++; } else { evens++; } } return 0; }
в зависимости от наличия четных и нечетных входных данных, программа может находится чаще находится в ветке if или else. Компилятор может создать код, который будет выполняться быстрее для if или else, но без использования априорных данных используется оптимизация по умолчанию. Использование техники PGO позволяет автоматически выбирать стратегии оптимизации компиляции. В указанном выше случае, для случая наличия во входном потоке 25 % четных и 75 % нечетных данных выигрыш от оптимизации достигает 18 %, при 100 % нечетных — выигрыш 34 %.
Источник: VisualDSP++ 4.5 Getting Started Guide, ©2006 Analog Devices