рдЬреАрд╕реАрд╕реА рдкреНрд░реЛрдлрд╛рдЗрд▓-рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЕрдиреБрдХреВрд▓рди

рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓-рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЕрдиреБрдХреВрд▓рди (рдЗрд╕рдХреЗ рдмрд╛рдж рдкреАрдЬреАрдУ) рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рддрдХрдиреАрдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЛ рдмрдврд╝рд╛рдирд╛ рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдкреАрдЬреАрдУ рдЗрд╖реНрдЯрддрдо рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдкрд░реАрдХреНрд╖рдг рд░рди рдХреЗ рдорд╛рдк рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЯреЗрд╕реНрдЯ рд░рди рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдЕрдХреНрд╕рд░ рдХрдо рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓реЙрдиреНрдЪ рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛрдВ, рдЕрдиреНрдпрдерд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рднреА рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

PGO рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓рди рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ( рд╕реНрд░реЛрдд ):

рдореИрдВ GCC рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп PGO рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ред рдЬреАрд╕реАрд╕реА рдореЗрдВ рдкреАрдЬреАрдУ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рджреЛ рдЭрдВрдбреЗ -fprofile-generate рдФрд░ -fprofile-use рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХрд▓рди рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
  1. рд╕рднреА рдЕрдиреБрдХреВрд▓рди рдЭрдВрдбреЗ рдФрд░ -рдлреНрд░реАрдлрд╛рдЗрд▓-рдЬреЗрдирд░реЗрдЯ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдпрд╣ рдзреНрд╡рдЬ рд╕рдВрдХрд▓рдХ рдФрд░ рд▓рд┐рдВрдХрд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
    g ++ -O3 -march = native -mtune = native -fprofile-generate -Wall -c -fmessage-length = 0 -MMD -MP -MF "src / pgo-1.d" -MT - src / pgo-1.d "-рдУ" src / pgo-1.o "" ../src/pgo-1.cpp "
    g ++ -fprofile-generate -o "pgo-1" ./src/pgo-1.o

  2. рд╕рдлрд▓ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд░рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рд░рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬреАрд╕реАрдбреАрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдВрдХрдбрд╝реЗ рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА ред
  3. рд╕рднреА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝реНрд▓реИрдЧ рдФрд░ -fprofile-use рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдпрд╣ рдзреНрд╡рдЬ рд╕рдВрдХрд▓рдХ рдФрд░ рд▓рд┐рдВрдХрд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
    g ++ -O3 -march = native -mtune = native -fprofile-use -Wall -c -fmessage-length = 0 -MMD -MP -MF "src / pgo-1.d" -MT - src / pgo-1.d "-рдУ" src / pgo-1.o "" ../src/pgo-1.cpp "
    g ++ -fprofile-use -o "pgo-1" ./src/pgo-1.o

    рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬреАрд╕реАрдИ рдЪрд░рдг 2 рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдпрд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓реАред

рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рд░рд▓ рдпреЛрдЬрдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдХрд┐рд╕реА рднреА рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдЭрдВрдбреЗ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреАрдЬреАрдУ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЕрдзреНрдпрдпрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдХреЛрдб:
# рдХрд┐рдВрдХрд░реНрддрд╡реНрдпрд╡рд┐рдореВрдврд╝ <iostream>
# рдЕрд▓рдЧ рдХрд░рдирд╛ <рдПрд▓реНрдЧреЛрд░рд┐рдердо>
# рдЕрд▓рдЧ рдХрд░рдирд╛ <stdlib.h>

const size_t MB = 1024 * 1024 ;
size_t MOD = 0 ;

рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рдЕрдиреВрдареЗ ( ) {
рд╕реНрдерд┐рд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рдирдВрдмрд░ = 0 ;
рд░рд┐рдЯрд░реНрди ++ рдирдВрдмрд░ % MOD ;
}

int main ( int argc, char ** argv ) {
рдЕрдЧрд░ ( argc < 3 ) {
рд╡рд╛рдкрд╕реА 1 ;
}

size_t BLOCK_SIZE = atoi ( argv [ 1 ] ) * MB ;
MOD = atoi ( argv [ 2 ] ) ;

рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ * рдХрдЪрд░рд╛ = ( рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ * ) рдореЙрд▓реЛрдХ ( BLOCK_SIZE ) ;

std :: generate_n ( рдХрдЪрд░рд╛, BLOCK_SIZE, uniqueNumber ) ;
std :: рд╕реЙрд░реНрдЯ ( рдХрдЪрд░рд╛, рдХрдЪрд░рд╛ + BLOCK_SIZE ) ;

рдореБрдХреНрдд ( рдХрдЪрд░рд╛ ) ;

рд╡рд╛рдкрд╕реА 0 ;
}


рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрдИ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХрд╛ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдП рдЧрдП рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рднрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
./prog 32 3 - рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднрд░рд╛ рд╣реБрдЖ 32MB рдХрд╛ рдЖрдХрд╛рд░ рдмрдирд╛рдпреЗрдЧрд╛: {1, 2, 1, 2, ...}ред рдлрд┐рд░ рдЗрд╕реЗ рдЫрд╛рдВрдЯреЗрдЧрд╛ред

./prog 16 7 - рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднрд░рд╛ рд╣реБрдЖ 16MB рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдЧрд╛: {1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, ...}ред рдлрд┐рд░ рдЗрд╕реЗ рдЫрд╛рдВрдЯреЗрдЧрд╛ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ, рд╣рдо рдЗрд╕ рд╕рд░рдгреА рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рд╕рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рд╕рд╢рд░реНрдд рд╢рд╛рдЦрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде 1792 рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рдШрдЯрд╛ рджрд┐рдпрд╛ред рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рднрд┐рдиреНрди рдерд╛: {2, 4, 8, 16, 32, 128, 256}, рдФрд░ рднрд╛рдЬрдХ {1..256}ред

рдЙрддреНрдкрд╛рджрдХрддрд╛ рд▓рд╛рдн (рд╕рдВрдЪрд┐рдд)


рдЗрд╕ рдЧреНрд░рд╛рдл рдореЗрдВ, рдмреНрдпрд╛рдЬ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдЖрд░реЛрдкрд┐рдд рд╣реИред рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдВрдЧ рд╕реЗ рднрд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рди рдХрд┐ y рдЕрдХреНрд╖ рдкрд░ рджрд┐рдП рдЧрдП рдкреВрд░реНрдг рдореВрд▓реНрдпреЛрдВ рдкрд░ред рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдЙрддрдиреА рд╣реА рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреАред рдЧреНрд░рд╛рдл рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд░рдгреА рдЖрдХрд╛рд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рджрд┐рдЦрд╛рддрд╛ рд╣реИред


рдЙрддреНрдкрд╛рджрдХрддрд╛ рд▓рд╛рдн (рд╕рд░рд▓)


Y рдЕрдХреНрд╖ рдПрдХ рдЧреИрд░-рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдХрд╛ рдкреНрд░рддрд┐рд╢рдд рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдПрдХреНрд╕-рдПрдХреНрд╕рд┐рд╕ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдбрд┐рд╡рд╛рдЗрдбрд░ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред


рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди


Y рдЕрдХреНрд╖ рдкрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд░реЗрдЦрд╛рдВрдХрди рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдФрд░ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╡рд┐рднрд╛рдЬрдХ рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдХрд┐рдВрд╡рджрдВрддреА рдореЗрдВ, -PGO рдХрд╛ рдЕрд░реНрде рд╣реИ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛, рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде + PGOред
















рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдкреАрдЬреАрдУ-рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдХреВрд▓рди рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ 5-25% рдХреА рд╕реНрдерд┐рд░ рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╕реЛрд░реНрд╕ рдХреЛрдб рд╡рд╛рд▓реА рдлрд╛рдЗрд▓, рдЯреЗрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЧреНрд░рд╛рдлрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рд╕рдВрдЧреНрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
pgo-1 / fprofile-generate - -fprofile-generate рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ
pgo-1 / fprofile-use - рдПрдХ рдирд┐рд░реНрдорд╛рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ -fprofile-use рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдБ
pgo-1 / рд░рд┐рд▓реАрдЬрд╝ - рдирд┐рдпрдорд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ
pgo-1 / src - рд╕реНрд░реЛрдд рдХреЛрдб
pgo-1 / graph.pl - рдЪрд╛рд░реНрдЯ рдкреАрдврд╝реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рд╕реБрдкрд░_рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рддрд╛ рд╣реИ)
pgo-1 / run.sh - рдкрд░реАрдХреНрд╖рдг рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ

graph.pl рдПрдХ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд░рди.рд╢ рдХрдорд╛рдВрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рднрд╛рдЧ рд╕рдХрддреЗ рд╣реИрдВ:
./run.sh> рд▓реЙрдЧ 2> рдФрд░ 1
рдЯреЗрд▓ рд▓реЙрдЧ | grep -A2 PGO


рдпреБрдкреАрдбреАред рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ -O3 -рд╛рд░реНрдЪ = рдореВрд▓ -mtune = рдореВрд▓ PGO рдХреЗ рдмрд┐рдирд╛, рдФрд░ -O3 -ch = рдореВрд▓ -mtune = рдореВрд▓ рдирд┐рд╡рд╛рд╕реА PGO рдХреЗ рд╕рд╛рдеред рд╕рднреА рд░реЗрдЦрд╛рдВрдХрди -O3 -march = рджреЗрд╢реА -mtune = рджреЗрд╢реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╡реГрджреНрдзрд┐ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред

рджрд░реНрдкрдг рд▓реЗрдЦ

Source: https://habr.com/ru/post/In138132/


All Articles