
рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓-рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЕрдиреБрдХреВрд▓рди (рдЗрд╕рдХреЗ рдмрд╛рдж рдкреАрдЬреАрдУ) рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рддрдХрдиреАрдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЛ рдмрдврд╝рд╛рдирд╛ рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдкреАрдЬреАрдУ рдЗрд╖реНрдЯрддрдо рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдкрд░реАрдХреНрд╖рдг рд░рди рдХреЗ рдорд╛рдк рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЯреЗрд╕реНрдЯ рд░рди рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдЕрдХреНрд╕рд░ рдХрдо рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓реЙрдиреНрдЪ рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛрдВ, рдЕрдиреНрдпрдерд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рднреА рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
PGO рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓рди рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (
рд╕реНрд░реЛрдд ):
- Inlining - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдП рдЕрдХреНрд╕рд░ рдлрд╝рдВрдХреНрд╢рди рдмреА рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдмреА рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдмреА рдП рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реИред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╡рд░реНрдЪреБрдЕрд▓ рдХреЙрд▓ рдЕрдЯрдХрд▓реЗрдВ - рдпрджрд┐ рдХреЛрдИ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЙрд▓, рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреЙрдЗрдВрдЯрд░ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпрдХреНрд╖ (рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рд╣реЛрдиреЗ рдкрд░) рдХреЙрд▓ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд (рдЗрдирд▓рд╛рдЗрди) рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрди - рдПрдХрддреНрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрди рдХрд╛ рдЕрдиреБрдХреВрд▓рдиред
- рдмреЗрд╕рд┐рдХ рдмреНрд▓реЙрдХ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди - рдпрд╣ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдЖрдкрдХреЛ рдХреЛрдб рдХреЗ рдмреНрд▓реЙрдХ рдХрд╣реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдПрдХ рдЖрдо рдореЗрдореЛрд░реА рдкреЗрдЬ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреЗрдЬреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореЗрдореЛрд░реА рдУрд╡рд░рд░рди рдХрд░рддрд╛ рд╣реИред
- рдЖрдХрд╛рд░ / рдЧрддрд┐ рдЕрдиреБрдХреВрд▓рди - рдРрд╕реЗ рдХрд╛рд░реНрдп рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдлрдВрдХреНрд╢рди рд▓реЗрдЖрдЙрдЯ - рдХреЙрд▓ рдЧреНрд░рд╛рдл рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рд╣реА рдирд┐рд╖реНрдкрд╛рджрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдп рдПрдХ рд╣реА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд░рдЦреЗ рдЬрд╛рдПрдВрдЧреЗред
- рд╕рд╢рд░реНрдд рд╢рд╛рдЦрд╛ рдЕрдиреБрдХреВрд▓рди - рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдмрдВрдЯреА рдФрд░ рд╕реНрд╡рд┐рдЪ рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рдиред рдкрд░реАрдХреНрд╖рдг рд░рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреАрдЬреАрдУ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдХреМрди рд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВред рдЗрди рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╣реА рдЕрдЧрд░ / рдФрд░ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕рдВрдХрд▓рдХ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╢рд╛рдЦрд╛ рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдбреЗрдб рдХреЛрдб рд╕реЗрдкрд░реЗрд╢рди - рдХреЛрдб рдЬрд┐рд╕реЗ рдЯреЗрд╕реНрдЯ рд░рди рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдмрд╛рд░-рдмрд╛рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЗрдореЛрд░реА рдкреЗрдЬреЛрдВ рд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
- EH рдХреЛрдб рдкреГрдердХреНрдХрд░рдг - рдЕрдкрд╡рд╛рдж рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред
- рдореЗрдореЛрд░реА рдЖрдВрддрд░рд┐рдХ - (рдореБрдЭреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВ рдореВрд▓ рдЙрджреНрдзрд░рдг рджреЗрддрд╛ рд╣реВрдВ) рдЖрдВрддрд░рд┐рдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдВрддрд░рд┐рдХ рдХреЛ рдЕрдХреНрд╕рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд╛рд▓ рдпрд╛ рдкреНрд░рддрд┐рдпреЛрдВ рдХреЗ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЖрдВрддрд░рд┐рдХ рднреА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ GCC рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп PGO рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ред рдЬреАрд╕реАрд╕реА рдореЗрдВ рдкреАрдЬреАрдУ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рджреЛ рдЭрдВрдбреЗ -fprofile-generate рдФрд░ -fprofile-use рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХрд▓рди рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рд╕рднреА рдЕрдиреБрдХреВрд▓рди рдЭрдВрдбреЗ рдФрд░ -рдлреНрд░реАрдлрд╛рдЗрд▓-рдЬреЗрдирд░реЗрдЯ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдпрд╣ рдзреНрд╡рдЬ рд╕рдВрдХрд▓рдХ рдФрд░ рд▓рд┐рдВрдХрд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
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
- рд╕рдлрд▓ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд░рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рд░рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬреАрд╕реАрдбреАрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдВрдХрдбрд╝реЗ рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА ред
- рд╕рднреА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝реНрд▓реИрдЧ рдФрд░ -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 = рджреЗрд╢реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╡реГрджреНрдзрд┐ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред
рджрд░реНрдкрдг рд▓реЗрдЦ