Profile-guided optimization — различия между версиями

Материал из ЭНЭ
Перейти к: навигация, поиск
м (Новая: '''P'''rofile-'''g'''uided '''o'''ptimization (PGO), техника оптимизации программного кода, которая испо...)
 
м
Строка 1: Строка 1:
[[Profile-guided optimization|'''P'''rofile-'''g'''uided '''o'''ptimization]] ([[PGO]]), техника оптимизации программного кода, которая использует информацию [[профилилировщик]]а для выбора решений оптимизатором [[компилятор]]а. Например, в данном примере  
+
'''Profile-guided optimization''' ([[PGO]], оптимизация по профилю) — техника оптимизации программного кода, которая использует информацию [[профилилировщик]]а для выбора решений оптимизатором [[компилятор]]а. Например, в данном примере  
 
<source lang="c">
 
<source lang="c">
 
/****************************************************************************
 
/****************************************************************************

Версия 15:23, 31 марта 2008

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