
рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд╕рдмрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдХрд╛рд░рдг рдЖрдзреБрдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдореЗрдВ рд░реИрдо рдФрд░ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рд╣реИред рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреИрд╕реЗрдЯ рд╕реЗ рднреЛрдЬрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реИред рдпрд╛ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рдкрд▓рдХ рдХреЛ рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЖрд╡реЗрджрди рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгред рд╢рд╛рдпрдж рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрднреА рднреА рдХреЛрдб рдЖрдХрд╛рд░ рдФрд░ рдореЗрдореЛрд░реА рдЦрдкрдд рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЯреИрдмрд▓реЗрдЯ рдФрд░ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрд╣ рд▓реЗрдЦ GCC рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдирдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрдВрдЯреЗрд▓ рдПрдЯрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдлреЗрдбреЛрд░рд╛ 17 рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ x86 рдЬреАрд╕реАрд╕реА рд╕рдВрдХрд▓рдХ рд╕рдВрд╕реНрдХрд░рдг 4.7.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЗрдЦ рдХрд╛ рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
GCC рдЖрдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХрд┐рдВрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕ рд╣рдж рддрдХ рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХ рдкрд░ рдЬреАрддрддрд╛ рд╣реИ, рд╡рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реИред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдЬрдм рдЖрдХрд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ "-OO" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рдорд┐рддреАрдп рдорд╛рдзреНрдп рдХреЛрдб рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд▓реЗрдЯ рд╣реИред
рдкреНрд▓реЗрдЯ рдкрд░ рдкрд░рд┐рдгрд╛рдо "-O" рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред рдПрдХ рдЫреЛрдЯреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрдо рдХреЛрдбред "-M32, -mfpmath = sse, -march = atom" рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВред
-O2 | 6% |
-рдУ 2 -рдлреНрд▓реЛ | -5% |
-Ofast | 11,5% |
-рдлрд╕реНрдЯ -рдлреНрд▓реЛ | 3% |
-рдлрд╕реНрдЯ-рдлреБрдирд░реЛрд▓-рд▓реВрдкреНрд╕ | 19% |
-рдЕрдЧрд▓рд╛ -рдлреБрдирд░реЛрд▓-рд▓реВрдк -рдлреНрд▓реЛ | 10,5% |
"-Ofast" (рдпрд╛ "-O3") рдФрд░ "-Funroll-loops" рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдЖрдХреНрд░рд╛рдордХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдЗрдирд▓рд╛рдЗрди) рдХреЗ рдХрд╛рд░рдг "-flto" рд╡рд┐рдХрд▓реНрдк рдХреЛ рднреА рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░рд┐рдгрд╛рдо рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдХреНрдпреЛрдВ?
"-Flto" рдЕрдкреНрд░рдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдРрд╕рд╛ рдмрди рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдХреЙрд▓ рдХреЗ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдХреЛрдб рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред "-Flto" рдХреЗ рдмрд┐рдирд╛ рдЕрдкреНрд░рдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк "-function-section -Wl, - gc-section" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдВрддрд░рд┐рдХ рд╕реНрдереИрддрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рддрдХрдиреАрдХ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддреА рд╣реИред
рдХреНрдпрд╛ рдЖрд╡реЗрджрди рдЕрднреА рднреА рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ? рдбрд╛рдЙрдирд╕рд╛рдЗрдЬрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рддрдХрдиреАрдХреЗрдВ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, GCC "-fasynchronous-рдЦреЛрд▓-рдЯреЗрдмрд▓" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ "C" рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдкрд░ рднреА EH (рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ) рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХрд▓рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ "-fno-asynchronous-рдЦреЛрд▓-рддрд╛рд▓рд┐рдХрд╛рдУрдВ" рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
"-Wl, - рд╕реНрдЯреНрд░рд┐рдк-рдСрд▓" рд╕рднреА рд╡рд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХрд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рднреА рдХрдард┐рди рдмрдирд╛ рджреЗрдЧрд╛ред рдФрд░ рдлрд┐рд░ рднреА, рдпрджрд┐ рдХреЛрдб рдЖрдХрд╛рд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддреЛ рд╡рд┐рдХрд▓реНрдк рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдиреАрдЪреЗ рдПрдХ рдкреНрд▓реЗрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рднрд╛рд╡ рдХреЛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- "-рдлрдВрдХреНрд╢рди-рд╕реЗрдХреНрд╢рди -Wl, - рдЬреАрд╕реА-рд╕реЗрдХреНрд╢рди" (+ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░)
- "-рдлрдВрдХреНрд╢рди-рд╕реЗрдХреНрд╢рди -Wl, - рдЬреАрд╕реА-рд╕реЗрдХреНрд╢рди -fno-asynchronous-рдЦреЛрд▓-рдЯреЗрдмрд▓" (+ рдмрд┐рдирд╛ рдкрджреЛрдиреНрдирддрд┐ рдЯреЗрдмрд▓ рдХреЗ)
- "-рдлрдВрдХреНрд╢рди-рд╕реЗрдХреНрд╢рди -Wl, - рдЬреАрд╕реА-рд╕реЗрдХреНрд╢рди -fno-asynchronous-рдЦреЛрд▓-рдЯреЗрдмрд▓ -Wl, - рд╕реНрдЯреНрд░рд┐рдк-рдСрд▓" (+ рдбрд┐рд▓реАрдЯ рдХрд░реЗрдХреНрдЯрд░)
рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдПред
рдкреНрд▓реЗрдЯ рдкрд░ рдкрд░рд┐рдгрд╛рдо "-O" рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред рдПрдХ рдЫреЛрдЯреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрдо рдХреЛрдбред "-M32, -mfpmath = sse, -march = atom" рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВред
| рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ | + рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ | + рдкрджреЛрдиреНрдирддрд┐ рдЯреЗрдмрд▓ рдХреЗ рдмрд┐рдирд╛ | + рд╡рд░реНрдг рд╣рдЯрд╛рдПрдВ |
-Os | - | -5% | -10.5% | -22.5% |
-O2 | 6% | 0.5% | -3.5% | -13.5% |
-рдУ 2 -рдлреНрд▓реЛ | -5% | -5% | -8% | -17% |
-Ofast | 11,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- "-OIFT" рдЬреИрд╕реЗ "-O3 -рдлрд╛рд╕реНрдЯ-рдЧрдгрд┐рдд" рдореЗрдВ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдФрд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЖрдХреНрд░рд╛рдордХ рдЕрдиреБрдХреВрд▓рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди)
- "-рдлреНрд▓реИрдЯреЛ" рдЗрдВрдЯрд░рдореЙрдбрд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди
- "-m32" 32 рдмрд┐рдЯ рдореЛрдб
- "-mfpmath = sse" рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдВрдХрдЧрдгрд┐рдд (x87 рдореЛрдб рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдЯреИрдХ рдХреЗ рдмрдЬрд╛рдп) рдореЗрдВ рдПрдХреНрд╕рдПрдордПрдо рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ
- "-рдлреБрдирд░реЛрд▓-рд▓реВрдкреНрд╕" рд▓реВрдк рддреИрдирд╛рддреА рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ
- "-ffunction-section" рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ
- "-рдУрд╕" рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЖрдХрд╛рд░ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ
- "-fno-asynchronous-рдЦреЛрд▓-рдЯреЗрдмрд▓" рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдкреНрд░рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд▓рд┐рдВрдХрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ):
sourceware.org/binutils/docs/ld/Options.html- "-Gc- рдЕрдиреБрднрд╛рдЧ" рдЕрдкреНрд░рдпреБрдХреНрдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ
- "-рд╕реНрдЯреНрд░рд┐рдк-рдСрд▓" рдЪрд░рд┐рддреНрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ