GCC x86 рдХреЛрдб рд╕рд╛рдЗрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд░реЗрдВ

рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд╕рдмрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдХрд╛рд░рдг рдЖрдзреБрдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдореЗрдВ рд░реИрдо рдФрд░ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рд╣реИред рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреИрд╕реЗрдЯ рд╕реЗ рднреЛрдЬрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реИред рдпрд╛ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рдкрд▓рдХ рдХреЛ рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЖрд╡реЗрджрди рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгред рд╢рд╛рдпрдж рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрднреА рднреА рдХреЛрдб рдЖрдХрд╛рд░ рдФрд░ рдореЗрдореЛрд░реА рдЦрдкрдд рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЯреИрдмрд▓реЗрдЯ рдФрд░ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрд╣ рд▓реЗрдЦ GCC рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдирдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрдВрдЯреЗрд▓ рдПрдЯрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдлреЗрдбреЛрд░рд╛ 17 рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ x86 рдЬреАрд╕реАрд╕реА рд╕рдВрдХрд▓рдХ рд╕рдВрд╕реНрдХрд░рдг 4.7.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЗрдЦ рдХрд╛ рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

GCC рдЖрдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХрд┐рдВрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕ рд╣рдж рддрдХ рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХ рдкрд░ рдЬреАрддрддрд╛ рд╣реИ, рд╡рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реИред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдЬрдм рдЖрдХрд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ "-OO" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рдорд┐рддреАрдп рдорд╛рдзреНрдп рдХреЛрдб рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд▓реЗрдЯ рд╣реИред
рдкреНрд▓реЗрдЯ рдкрд░ рдкрд░рд┐рдгрд╛рдо "-O" рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред рдПрдХ рдЫреЛрдЯреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрдо рдХреЛрдбред "-M32, -mfpmath = sse, -march = atom" рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВред
-O26%
-рдУ 2 -рдлреНрд▓реЛ-5%
-Ofast11,5%
-рдлрд╕реНрдЯ -рдлреНрд▓реЛ3%
-рдлрд╕реНрдЯ-рдлреБрдирд░реЛрд▓-рд▓реВрдкреНрд╕19%
-рдЕрдЧрд▓рд╛ -рдлреБрдирд░реЛрд▓-рд▓реВрдк -рдлреНрд▓реЛ10,5%

"-Ofast" (рдпрд╛ "-O3") рдФрд░ "-Funroll-loops" рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдЖрдХреНрд░рд╛рдордХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдЗрдирд▓рд╛рдЗрди) рдХреЗ рдХрд╛рд░рдг "-flto" рд╡рд┐рдХрд▓реНрдк рдХреЛ рднреА рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░рд┐рдгрд╛рдо рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдХреНрдпреЛрдВ?
"-Flto" рдЕрдкреНрд░рдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдРрд╕рд╛ рдмрди рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдХреЙрд▓ рдХреЗ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдХреЛрдб рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред "-Flto" рдХреЗ рдмрд┐рдирд╛ рдЕрдкреНрд░рдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк "-function-section -Wl, - gc-section" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдВрддрд░рд┐рдХ рд╕реНрдереИрддрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рддрдХрдиреАрдХ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддреА рд╣реИред
рдХреНрдпрд╛ рдЖрд╡реЗрджрди рдЕрднреА рднреА рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ? рдбрд╛рдЙрдирд╕рд╛рдЗрдЬрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рддрдХрдиреАрдХреЗрдВ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, GCC "-fasynchronous-рдЦреЛрд▓-рдЯреЗрдмрд▓" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ "C" рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдкрд░ рднреА EH (рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ) рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХрд▓рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ "-fno-asynchronous-рдЦреЛрд▓-рддрд╛рд▓рд┐рдХрд╛рдУрдВ" рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
"-Wl, - рд╕реНрдЯреНрд░рд┐рдк-рдСрд▓" рд╕рднреА рд╡рд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХрд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рднреА рдХрдард┐рди рдмрдирд╛ рджреЗрдЧрд╛ред рдФрд░ рдлрд┐рд░ рднреА, рдпрджрд┐ рдХреЛрдб рдЖрдХрд╛рд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддреЛ рд╡рд┐рдХрд▓реНрдк рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдиреАрдЪреЗ рдПрдХ рдкреНрд▓реЗрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рднрд╛рд╡ рдХреЛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдПред

рдкреНрд▓реЗрдЯ рдкрд░ рдкрд░рд┐рдгрд╛рдо "-O" рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред рдПрдХ рдЫреЛрдЯреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрдо рдХреЛрдбред "-M32, -mfpmath = sse, -march = atom" рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ+ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛+ рдкрджреЛрдиреНрдирддрд┐ рдЯреЗрдмрд▓ рдХреЗ рдмрд┐рдирд╛+ рд╡рд░реНрдг рд╣рдЯрд╛рдПрдВ
-Os--5%-10.5%-22.5%
-O26%0.5%-3.5%-13.5%
-рдУ 2 -рдлреНрд▓реЛ-5%-5%-8%-17%
-Ofast11,5%6%2%- 6.5%
-рдлрд╕реНрдЯ -рдлреНрд▓реЛ3%2.5%0.5%-6.5%
-рдлрд╕реНрдЯ-рдлреБрдирд░реЛрд▓-рд▓реВрдкреНрд╕19%12,5%9.5%3%
-рдЕрдЧрд▓рд╛ -рдлреБрдирд░реЛрд▓-рд▓реВрдк -рдлреНрд▓реЛ10,5%10%8.5%2.5%

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ): gcc.gnu.org/onbuildocs/gcc-4.7.2/gcc/Optimize-Options.html

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд▓рд┐рдВрдХрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ): sourceware.org/binutils/docs/ld/Options.html


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


All Articles