เบ›เปˆเบญเบเบŠเบธเบ”เบ„เบญเบกเบžเบตเบงเป€เบ•เบต GCC 9

เบซเบผเบฑเบ‡เบˆเบฒเบเบ›เบตเบ‚เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ เบˆเบฑเบ”เบžเบตเบกเบกเบฒ เบ›เปˆเบญเบเบŠเบธเบ” compilers เบŸเบฃเบต GCC 9.1, เบเบฒเบ™เบ›เปˆเบญเบเปƒเบซเบเปˆเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เปƒเบ™เบชเบฒเบ‚เบฒ GCC 9.x เปƒเบซเบกเปˆ. เบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบš เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เปƒเบซเบกเปˆโ€‹ เบ•เบปเบงเป€เบฅเบเบเบฒเบ™เบ›เปˆเบญเบ, เบฎเบธเปˆเบ™ 9.0 เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปเบฅเบฐเบšเปเปˆเบ”เบปเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบญเบญเบ GCC 9.1, เบชเบฒเบ‚เบฒ GCC 10.0 เป„เบ”เป‰เปเบเบเบญเบญเบเปเบฅเป‰เบง, เบšเบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบญเบเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ•เปเปˆเป„เบ›, GCC 10.1, เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™.

GCC 9.1 เป€เบ›เบฑเบ™เบ—เบตเปˆเป‚เบ”เบ”เป€เบ”เบฑเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบฐเบ–เบฝเบ™เบฅเบฐเบžเบฒเบšเบชเปเบฒเบฅเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C ++17, เบชเบทเบšเบ•เปเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C ++ 20 เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ” (เบฅเบฐเบซเบฑเบ”เบŠเบทเปˆ C ++ 2a), เบเบฒเบ™เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒเบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ D, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบšเบฒเบ‡เบชเปˆเบงเบ™เบชเปเบฒเบฅเบฑเบš OpenMP 5.0 , เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบเบทเบญเบšเบชเบปเบกเบšเบนเบ™เบชเปเบฒเบฅเบฑเบš OpenACC 2.5, เป€เบžเบตเปˆเบกเบ—เบฐเบงเบตเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš interprocedural เปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบœเบนเบเบกเบฑเบ”, เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ„เปเบฒเป€เบ•เบทเบญเบ™เปƒเบซเบกเปˆ, backends เบชเปเบฒเบฅเบฑเบš OpenRISC, C-SKY V2 เปเบฅเบฐ AMD GCN GPU.

เบ•เบปเป‰เบ™โ€‹เบ•เป เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡:

  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก D. GCC เบ›เบฐเบเบญเบšเบกเบต frontend เบเบฑเบš compiler GDC (Gnu D Compiler) เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” runtime (libphobos) เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เปƒเบŠเป‰ GCC เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป‚เบ›เบผเปเบเบผเบกเปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก D. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฒเบชเบฒ D เปƒเบ™ GCC เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเป‰เบง เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เปƒเบ™เบ›เบต 2011, เปเบ•เปˆ เบฅเบฒเบเป„เบ› เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบ‚เบญเบ‡ GCC เปเบฅเบฐเบšเบฑเบ™เบซเบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป‚เบญเบ™เบชเบดเบ”เบ—เบดเบŠเบฑเบšเบชเบดเบ™เบ—เบฒเบ‡เบ›เบฑเบ™เบเบฒเบเบฑเบš Digital Mars, เป€เบŠเบดเปˆเบ‡เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบก D;
  • เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เป„เบ”เป‰เบ–เบทเบเป€เบฎเบฑเบ”เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบธเบ”เบ—เบฐเบชเบฒเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ‚เบญเบ‡ Switch (เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ•เบฑเป‰เบ™เป„เบ›เบซเบฒ, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเบดเบ”, เบ•เบปเป‰เบ™เป„เบกเป‰เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ) เบ‚เบถเป‰เบ™เบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบชเบฑเป‰เบ™เบŠเบทเปˆเบ—เบตเปˆเบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ‚เบญเบ‡ Switch เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš "-ftree-switch-conversion" (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบŠเบธเบ”เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบŠเบฑเปˆเบ™ "เบเปเบฅเบฐเบ™เบต 2: how = 205; break; case 3: how = 305; break. ;โ€ เบˆเบฐเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ "100 * เบงเบดเบ—เบต + 5";
  • เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš interprocedural. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ inline deployment เป„เบ”เป‰เบ–เบทเบเบ”เบฑเบ”เปเบ›เบ‡เบชเปเบฒเบฅเบฑเบš codebases C++ เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปเบฅเบฐเบ‚เบฐเบซเบเบฒเบเบ”เป‰เบงเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบซเบกเปˆ max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns เปเบฅเบฐ uninlined -thunk-time. เบ›เบฑเบšเบ›เบธเบ‡เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบฎเบธเบเบฎเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบเบเบฅเบฐเบซเบฑเบ”เป€เบขเบฑเบ™ / เบฎเป‰เบญเบ™. เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบซเบผเบฒเบ เบซเบ™เปˆเบงเบโ€‹เบ‡เบฒเบ™โ€‹เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบกเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ);
  • เบเบปเบ™เป„เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” profile (PGO - Profile-guided optimization) เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡, เป€เบŠเบดเปˆเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”. เบ•เบปเบงเป€เบฅเบทเบญเบเบชเบฐเบซเบผเบธเบš "-fprofile-เปƒเบŠเป‰" เบ•เบญเบ™เบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบตเบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" เปเบฅเบฐ "-ftree-loop-distribution". เบ–เบญเบ™เป€เบญเบปเบฒเบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒ histograms เบเบฑเบš counters เปƒเบ™เป„เบŸเบฅเปŒ, เป€เบŠเบดเปˆเบ‡เบซเบผเบธเบ”เบฅเบปเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเป‚เบ›เบฃเป„เบŸเบฅเปŒ (histograms เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ);
  • เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบงเบฅเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ (LTO). เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เป„เบ”เป‰เบ–เบทเบเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธ LTO เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ, เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบœเบนเบเบกเบฑเบ”, เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™. เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™ (-param lto-partitions) เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบ 32 เป€เบ›เบฑเบ™ 128, เป€เบŠเบดเปˆเบ‡เบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบเบฐเบ—เบนเป‰ CPU. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบžเบทเปˆเบญเบ„เบงเบšเบ„เบธเบกเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ optimizer
    "-param lto-max-streaming-parallelism";

    เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบเบฑเบš GCC 8.3, เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบ™ GCC 9 เบญเบฐเบ™เบธเบเบฒเบ” เบซเบผเบธเบ”เป€เบงเบฅเบฒเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡ Firefox 5 เปเบฅเบฐ LibreOffice 66 เบ›เบฐเบกเบฒเบ™ 6.2.3%. เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธเบซเบผเบธเบ”เบฅเบปเบ‡ 7%. เป€เบงเบฅเบฒเบœเบนเบเบกเบฑเบ”เปƒเบ™ CPU 8-core เบซเบผเบธเบ”เบฅเบปเบ‡ 11%. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบกเปˆเบ™เป„เบงเบ‚เบถเป‰เบ™ 28% เปเบฅเบฐเปƒเบŠเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบ™เป‰เบญเบเบฅเบปเบ‡ 20%. เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบ‚เบญเบ‡ LTO เบซเบผเบธเบ”เบฅเบปเบ‡ 30%;

  • เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ C, C ++ เปเบฅเบฐ Fortran OpenACC 2.5, เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™ offloading เปƒเบ™ GPUs เปเบฅเบฐเป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบžเบดเป€เบชเบ”เป€เบŠเบฑเปˆเบ™ NVIDIA PTX;
  • เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบšเบฒเบ‡เบชเปˆเบงเบ™เบชเปเบฒเบฅเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบš C เปเบฅเบฐ C ++ เป€เบ›เบตเบ” MP 5.0 (Open Multi-Processing), เป€เบŠเบดเปˆเบ‡เบเบณเบ™เบปเบ” API เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฃเปเบเบฃเบกเปเบšเบšเบ‚เบฐเปœเบฒเบ™เบชเบณเบฅเบฑเบšเบžเบฒเบชเบฒ C, C++ เปเบฅเบฐ Fortran เปƒเบ™เบฅเบฐเบšเบปเบšเบซเบผเบฒเบเบซเบผเบฑเบ เปเบฅเบฐเบฅเบฐเบšเบปเบšเบ›เบฐเบชเบปเบก (CPU+GPU/DSP) เบ—เบตเปˆเบกเบตเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบฎเปˆเบงเบกเบเบฑเบ™ เปเบฅเบฐ vectorization (SIMD) ;
  • เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ C: "-Waddress-of-packed-เบชเบฐเบกเบฒเบŠเบดเบ" (เบ„เปˆเบฒเบ•เบปเบงเบŠเบตเป‰ unaligned เบเบฑเบšเบชเบฐเบกเบฒเบŠเบดเบเบšเบฑเบ™เบˆเบธเบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบซเบผเบทเบชเบฐเบซเบฐเบžเบฑเบ™) เปเบฅเบฐ
    ยซ-Wabsolute-value" (เป€เบกเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ„เบณเบ™เบงเบ™เบ„เปˆเบฒเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡, เบ–เป‰เบฒเบกเบตเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเป€เปเบฒเบฐเบชเบปเบกเบเบงเปˆเบฒเบชเบณเบฅเบฑเบšเบญเบฒเบเบดเบงเป€เบกเบฑเบ™เบ—เบตเปˆเบเบณเบ™เบปเบ”เป„เบงเป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡, fabs(3.14) เบ„เบงเบ™เปƒเบŠเป‰เปเบ—เบ™ abs(3.14). เป€เบžเบตเปˆเบกเบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเปƒเปเปˆเบชเบณเบฅเบฑเบš C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" เปเบฅเบฐ "-Wclass-conversion". เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเบ—เบตเปˆเบกเบตเบขเบนเปˆเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบ;

  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบžเบฒเบชเบฒ C เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบฅเบฐเบซเบฑเบ”เบŠเบทเปˆ C2x. เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš C2x, เปƒเบŠเป‰เบ•เบปเบงเป€เบฅเบทเบญเบ "-std=c2x" เปเบฅเบฐ "-std=gnu2x" (เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ GNU). เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™, เบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ _Static_assert เบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ (_Static_assert เบเบฑเบšเบชเบญเบ‡ arguments เปเบกเปˆเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™ C11);
  • เบฎเบญเบ‡เบฎเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C++17 เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ”เบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเปเบฑเป‰เบ™เบ„เบปเบ‡. เปƒเบ™เบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบžเบฒเบชเบฒเบ‚เบญเบ‡ C ++17 เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบชเปˆเบงเบ™, เปเบฅเบฐเปƒเบ™ libstdc ++, เบซเบ™เป‰เบฒเบ—เบตเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปเบกเปˆเบ™เบขเบนเปˆเปƒเบเป‰เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆ;
  • เบชเบทเบšเบ•เปเปˆ เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ” เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C++2a เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบ‚เบญเบšเป€เบ‚เบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก, เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ lambda เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบชเบฐเบกเบฒเบŠเบดเบเบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบญเบฒเบ”เบˆเบฐ / เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ–เบทเบเป€เบžเบตเปˆเบก, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™ virtual เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป„เบ”เป‰เบ–เบทเบเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰. , เปเบฅเบฐเบญเบทเปˆเบ™เป†.
    เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš C++2a, เปƒเบซเป‰เปƒเบŠเป‰เบ•เบปเบงเป€เบฅเบทเบญเบ "-std=c++2a" เปเบฅเบฐ "-std=gnu++2a". เป€เบžเบตเปˆเบกเป„เบŸเบฅเปŒเบชเปˆเบงเบ™เบซเบปเบงเบšเบดเบ” เปเบฅเบฐเป€เบงเบตเบŠเบฑเบ™เปƒเบชเปˆ libstdc++ เบชเบณเบฅเบฑเบš C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible เปเบฅเบฐ std::type_identity traits, std::midpoint, std::lerps , std::bind_front,
    std::visit, std::is_constant_evaluated เปเบฅเบฐ std::assume_aligned, เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ” char8_t, เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเปเบฅเบฐเบ„เปเบฒเบ•เปเปˆเบ—เป‰เบฒเบเบ‚เบญเบ‡ strings (starts_with, ends_with);

  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ›เป€เบŠเบ”เป€เบŠเบต ARM เปƒเบซเบกเปˆ
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE เปเบฅเบฐ Neoverse N1. เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบ™ Armv8.3-A เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ•เบปเบงเป€เบฅเบเบŠเบฑเบšเบŠเป‰เบญเบ™, เบเบฒเบ™เบชเป‰เบฒเบ‡เบˆเปเบฒเบ™เบงเบ™ pseudo-random number (rng) เปเบฅเบฐเบเบฒเบ™ tagging เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ (memtag), เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเปเบฅเบฐเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ„เบฒเบ”เบ„เบฐเป€เบ™เบชเบฒเบ‚เบฒ. . เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ AArch64, เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก เบ—เบฒเบ‡เบ•เบฑเบ”เบ‚เบญเบ‡ stack เปเบฅเบฐ heap (โ€œ-fstack-clash-protectionโ€). เป€เบžเบทเปˆเบญเปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณ Armv8.5-A, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ โ€œ-march=armv8.5-aโ€ เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒ.

  • เบกเบฑเบ™เบ›เบฐเบเบญเบšเบกเบต backend เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบš AMD GPUs เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบˆเบธเบฅเบฐเบžเบฒเบ GCN. เบ›เบฐเบˆเบธเบšเบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ–เบทเบเบˆเปเบฒเบเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบกเบตเบเบฐเบ—เบนเป‰เบ”เบฝเบง (เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบซเบผเบฒเบเบเบฐเบ—เบนเป‰เบœเปˆเบฒเบ™ OpenMP เปเบฅเบฐ OpenACC เบˆเบฐเบ–เบทเบเบชเบฐเป€เบซเบ™เบตเบ•เปเปˆเบกเบฒ) เปเบฅเบฐเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ GPU Fiji เปเบฅเบฐ Vega 10;
  • เป€เบžเบตเปˆเบก backend เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเป‚เบ›เป€เบŠเบ”เป€เบŠเบต OpenRISC;
  • เป€เบžเบตเปˆเบก backend เบชเปเบฒเบฅเบฑเบšเป‚เบ›เป€เบŠเบ”เป€เบŠเบต C-SKY V2, เบœเบฐเบฅเบดเบ”เป‚เบ”เบเบšเปเบฅเบดเบชเบฑเบ”เบˆเบตเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเบ•เปˆเบฒเบ‡เป†;
  • เบ•เบปเบงเป€เบฅเบทเบญเบเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปˆเบฒ byte เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ suffixes kb, KiB, MB, MiB, GB เปเบฅเบฐ GiB;
  • เบ›เบฐเบ•เบดเบšเบฑเบ” เบ•เบปเบงเป€เบฅเบทเบญเบ โ€œ-flive-patching=[inline-only-static|inline-clone]โ€ เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบšเบฑเบ™เบฅเบธเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ—เบตเปˆเบ›เบญเบ”เป„เบžเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เบ›เบฑเบšเบ•เบปเบงเปเบšเบšเบชเบปเบ”เป†เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบซเบผเบฒเบเบฅเบฐเบ”เบฑเบšเบ•เปเปˆเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™ (IPA) เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš;
  • เป€เบžเบตเปˆเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบ "--completion" เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบฎเบนเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบŠเป‰ bash;
  • เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบงเบดโ€‹เบ™เบดเบ”โ€‹เป„เบชโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบ‚เบญเบ‡ excerpts เปเบซเบผเปˆเบ‡โ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบ—เบตเปˆโ€‹เบŠเบตเป‰โ€‹เบšเบญเบโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เป€เบชเบฑเป‰เบ™โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เบเปˆเบฝเบงโ€‹เบ‚เป‰เบญเบ‡โ€‹, เป€เบŠเบฑเปˆเบ™โ€‹: เบ›เบฐโ€‹เป€เบžเบ” operandโ€‹. เป€เบžเบทเปˆเบญเบ›เบดเบ”เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบ•เบปเบงเป€เบฅเบเปเบ–เบง เปเบฅเบฐเบ›เป‰เบฒเบเบŠเบทเปˆ, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ โ€œ-fno-diagnostics-show-line-numbersโ€ เปเบฅเบฐ โ€œ-fno-diagnostics-show-labelsโ€ เปเบกเปˆเบ™เปƒเบซเป‰;

    เบ›เปˆเบญเบเบŠเบธเบ”เบ„เบญเบกเบžเบตเบงเป€เบ•เบต GCC 9

  • เบ‚เบฐเบซเบเบฒเบ เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบงเบดโ€‹เบ™เบดเบ”โ€‹เป„เบชโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบฑเบ” C ++โ€‹, เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เบเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบชเบฒโ€‹เป€เบซเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เป€เบ™เบฑเป‰เบ™โ€‹เบ•เบปเบงโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹;

    เบ›เปˆเบญเบเบŠเบธเบ”เบ„เบญเบกเบžเบตเบงเป€เบ•เบต GCC 9

  • เป€เบžเบตเปˆเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบ โ€œ-fdiagnostics-format=jsonโ€, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบชเป‰เบฒเบ‡เบœเบปเบ™เบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰ (JSON);
  • เป€เบžเบตเปˆเบกเบ•เบปเบงเป€เบฅเบทเบญเบเบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเปƒเปเปˆ โ€œ-fprofile-filter-filesโ€ เปเบฅเบฐ โ€œ-fprofile-exclude-filesโ€ เป€เบžเบทเปˆเบญเป€เบฅเบทเบญเบเป„เบŸเบฅเปŒเปเบซเบผเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™;
  • AddressSanitizer เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบขเบทเบ™เบขเบฑเบ™เบ—เบตเปˆเบซเบ™เบฒเปเบซเบ™เป‰เบ™เบเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเปเบ›เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เป€เบŠเบดเปˆเบ‡เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบตเปˆเบ–เบทเบเบเบงเบ”เบชเบญเบš;
  • เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เปƒเบ™ "-fopt-infoยป (เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบžเบตเปˆเบก). เป€เบžเบตเปˆเบกเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเปƒเบซเบกเปˆ "optimized" เปเบฅเบฐ "missed", เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบตเบขเบนเปˆเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰ "เบซเบกเบฒเบเป€เบซเบ”". เป€เบžเบตเปˆเบกเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เปเป‰เบกเบนเบ™เบ‚เปˆเบฒเบงเบชเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™ inline-unfolding เปเบฅเบฐ vectorization เบ‚เบญเบ‡เบงเบปเบ‡เบˆเบญเบ™;
  • เป€เบžเบตเปˆเบกเบ•เบปเบงเป€เบฅเบทเบญเบ โ€œ-fsave-optimization-recordโ€, เป€เบกเบทเปˆเบญเบฅเบฐเบšเบธเป„เบงเป‰, GCC เบˆเบฐเบšเบฑเบ™เบ—เบถเบเป„เบŸเบฅเปŒ SRCFILE.opt-record.json.gz เบ”เป‰เบงเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบšเบฒเบ‡เบขเปˆเบฒเบ‡. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบซเบกเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบฎเบนเบšเปเบšเบš "-fopt-info" เป‚เบ”เบเบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒ metadata เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เป€เบŠเบฑเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเป‚เบ›เบฃเป„เบŸเบฅเปŒเปเบฅเบฐเบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰ inline;
  • เป€เบžเบตเปˆเบกเบ•เบปเบงเป€เบฅเบทเบญเบ โ€œ-fipa-stack-alignmentโ€ เปเบฅเบฐ โ€œ-fipa-reference-addressableโ€ เป€เบžเบทเปˆเบญเบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เบˆเบฑเบ”เบงเบฒเบ‡ stack เปเบฅเบฐเบเบฒเบ™เปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบขเบนเปˆ (เบ‚เบฝเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ เบซเบผเบทเบญเปˆเบฒเบ™-exact) เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเปเบ›เบ„เบปเบ‡เบ—เบตเปˆเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš interprocedural;
  • เบซเบ™เป‰เบฒเบ—เบตเปˆเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเป€เบžเบทเปˆเบญเบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ„เบฒเบ”เบ„เบฐเป€เบ™เบชเบฒเบ‚เบฒเปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒ: "__builtin_has_attributeยซ, ยซ__builtin_expect_with_probability"เปเบฅเบฐ"__builtin_speculation_safe_value". เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเบชเปเบฒเบฅเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆ, เบ•เบปเบงเปเบ›เปเบฅเบฐเบ›เบฐเป€เบžเบ” เบ„เบฑเบ”เบฅเบญเบ;
  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™ / เบœเบปเบ™เบœเบฐเบฅเบดเบ” asynchronous เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ Fortran;
  • เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเปเบžเบฅเบฐเบ•เบฐเบŸเบญเบก Solaris 10 (*-*-solaris2.10) เปเบฅเบฐ Cell/BE (Cell Broadband Engine SPU) เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเป€เบชเบ”เปเบฅเป‰เบง เปเบฅเบฐเบˆเบฐเบ–เบทเบเบฅเบถเบšเบญเบญเบเปƒเบ™เบฅเบธเป‰เบ™เปƒเบซเบเปˆเบ•เปเปˆเป„เบ›. เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณ Armv2, Armv3, Armv5 เปเบฅเบฐ Armv5E เป„เบ”เป‰เบ–เบทเบเบขเบธเบ”เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เปเบฅเป‰เบง. เบเบฒเบ™โ€‹เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™ Intel MPX (เบเบฒเบ™โ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เบเบฒเบ™โ€‹เบ›เบปเบโ€‹เบ›เบฑเบโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒโ€‹) เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบขเบธเบ”โ€‹เป€เบŠเบปเบฒโ€‹เบเบฒเบ™โ€‹.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™