Tso tawm ntawm GCC 9 compiler suite

Tom qab ib xyoos ntawm kev loj hlob luam tawm tso tawm ib qho dawb txheej ntawm compilers GCC 9.1, thawj qhov kev tso tawm loj hauv GCC 9.x tshiab ceg. Raws li tswv yim tshiab tso tawm cov lej, version 9.0 tau siv thaum lub sijhawm txhim kho, thiab tsis ntev ua ntej kev tso tawm ntawm GCC 9.1, GCC 10.0 ceg tau tawg lawm, raws li qhov tseem ceeb tshaj tawm tom ntej, GCC 10.1, yuav raug tsim.

GCC 9.1 yog qhov tseem ceeb rau kev ruaj khov rau kev txhawb nqa rau C ++ 17 tus qauv, txuas ntxiv siv lub peev xwm ntawm yav tom ntej C ++ 20 tus qauv (codenamed C ++ 2a), suav nrog hauv pem hauv ntej rau D lus, ib feem kev txhawb nqa rau OpenMP 5.0 , yuav luag ua tiav kev txhawb nqa rau OpenACC 2.5, nce scalability ntawm interprocedural optimizations thiab optimizations nyob rau theem binding, nthuav cov cuab yeej kuaj mob thiab ntxiv cov lus ceeb toom tshiab, backends rau OpenRISC, C-SKY V2 thiab AMD GCN GPU.

ntsiab hloov:

  • Ntxiv kev txhawb nqa rau D programming lus GDC (Gnu D Compiler) thiab runtime qiv (libphobos), uas tso cai rau koj siv tus qauv GCC los tsim cov kev pab cuam hauv D programming lus. tau pib rov qab rau xyoo 2011, tab sis luag rau vim qhov yuav tsum tau coj cov cai ua raws li GCC cov cai thiab cov teeb meem nrog rau kev hloov pauv ntawm cov tswv cuab kev txawj ntse rau Digital Mars, uas tab tom tsim D programming lus;
  • Kev txhim kho tau ua rau lub tshuab hluav taws xob code. Piv txwv li, kev siv cov tswv yim sib txawv rau kev nthuav dav Hloov cov kab lus (dhia lub rooj, ntsuas me ntsis, tsob ntoo txiav txim siab) nyob ntawm qhov xwm txheej tau ua tiav. Ntxiv lub peev xwm los hloov txoj haujlwm uas suav nrog Hloov cov lus qhia siv qhov "-ftree-hloov-hloov" kev ua kom zoo (piv txwv li, cov xwm txheej zoo li "case 2: li cas = 205; tawg; case 3: li cas = 305; tawg ;” yuav hloov mus rau "100 * li cas + 5";
  • Txhim kho cov txheej txheem kev ua haujlwm zoo. Inline deployment settings tau hloov kho rau niaj hnub C ++ codebases thiab nthuav nrog cov tsis tshiab max-inline-insns-me, max-inline-insns-loj, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns thiab uninlined -thunk-time. Txhim kho qhov tseeb thiab aggressiveness ntawm txias / kub code sib cais. Txhim kho scalability rau loj heev txhais units (piv txwv li, thaum thov kev ua kom zoo dua ntawm theem txuas mus rau cov haujlwm loj);
  • Kev ua kom zoo dua qub raws li cov txiaj ntsig ntawm cov lej profile (PGO - Profile-guided optimization) tau raug txhim kho, uas ua kom muaj txiaj ntsig zoo dua raws li kev txheeb xyuas ntawm cov yam ntxwv ntawm kev ua tiav code. Summary Option "-fprofile-siv" tam sim no suav nrog cov kev ua kom zoo dua "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" thiab "-ftree-loop-distribution". Tshem tawm qhov suav nrog histograms nrog cov txee hauv cov ntaub ntawv, uas txo qhov loj ntawm cov ntaub ntawv nrog cov ntaub ntawv (histograms tam sim no tsim tawm ntawm ya thaum ua kom zoo dua thaum sib txuas);
  • Txhim kho Lub Sijhawm Txuas Txuas Ntxiv (LTO). Kev ua kom yooj yim ntawm cov hom tau muab ua ntej tsim qhov tshwm sim, uas ua rau nws ua tau kom txo qhov loj ntawm LTO cov ntaub ntawv cov khoom, txo kev nco noj nyob rau theem khi, thiab txhim kho kev ua haujlwm sib luag. Tus naj npawb ntawm partitions (-param lto-partitions) tau nce los ntawm 32 mus rau 128, uas txhim kho kev ua haujlwm ntawm cov tshuab nrog ntau cov xov tooj CPU. Ib qho parameter tau ntxiv los tswj tus naj npawb ntawm cov txheej txheem optimizer
    "-param lto-max-streaming-parallelism";

    Raws li qhov tshwm sim, piv rau GCC 8.3, qhov kev ua kom zoo tshaj plaws tau qhia hauv GCC 9 tso cai txo lub sij hawm muab tso ua ke ntawm Firefox 5 thiab LibreOffice 66 li ntawm 6.2.3%. Qhov loj ntawm cov khoom cov ntaub ntawv poob los ntawm 7%. Lub sijhawm khi ntawm 8-core CPU poob los ntawm 11%. Qhov kev ua kom zoo raws qib theem ntawm kev sib txuas yog tam sim no 28% sai dua thiab siv 20% nco tsawg dua. Nco noj ntawm txhua tus processor ntawm theem parallelized ntawm LTO txo los ntawm 30%;

  • Feem ntau ntawm cov lus qhia sib txuas ua ke yog siv rau C, C ++ thiab Fortran hom lus OpenACC 2.5, uas txhais cov cuab yeej rau kev ua haujlwm offloading ntawm GPUs thiab cov txheej txheem tshwj xeeb xws li NVIDIA PTX;
  • Kev txhawb nqa ib nrab rau tus qauv tau ua tiav rau C thiab C ++ QhibMP 5.0 (Qhib Multi-Processing), uas txhais cov API thiab cov txheej txheem ntawm kev siv cov txheej txheem sib luag rau cov lus C, C ++ thiab Fortran ntawm ntau cov tub ntxhais thiab hybrid (CPU + GPU / DSP) cov tshuab nrog kev sib koom nco thiab vectorization units (SIMD) ;
  • Cov lus ceeb toom tshiab tau ntxiv rau hom C: "-Waddress-of-packed-tus tswv cuab" (unaligned pointer tus nqi rau ib tus tswv cuab ntawm cov qauv lossis lub koomhaum) thiab
    Β«-Wabsolute-tus nqi" (thaum nkag mus rau kev ua haujlwm rau kev suav tus nqi tiag tiag, yog tias muaj kev ua haujlwm tsim nyog rau cov lus sib cav, piv txwv li, fabs(3.14) yuav tsum siv tsis yog abs(3.14). Cov lus ceeb toom tshiab ntxiv rau C ++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-tsav", "-Wpessimizing-tsav" thiab "-Wclass-conversion". Ntau cov lus ceeb toom yav dhau los tau nthuav dav;

  • Ntxiv kev sim txhawb rau ib feem ntawm yav tom ntej C hom lus, codenamed C2x. Txhawm rau pab txhawb C2x, siv cov kev xaiv "-std = c2x" thiab "-std = gnu2x" (kom pab txhawb GNU txuas ntxiv). Tus qauv tseem nyob rau theem pib ntawm txoj kev loj hlob, yog li ntawd, ntawm nws lub peev xwm, tsuas yog cov lus qhia _Static_assert nrog ib qho kev sib cav tau txais kev txhawb nqa (_Static_assert nrog ob qhov kev sib cav yog tus qauv hauv C11);
  • Kev them nyiaj yug rau C ++ 17 tus qauv tau tshaj tawm tias ruaj khov. Nyob rau hauv pem hauv ntej, cov lus muaj peev xwm ntawm C ++ 17 tau ua tiav tag nrho, thiab hauv libstdc ++, lub tsev qiv ntawv ua haujlwm tau teev tseg hauv tus qauv yog ze rau kev siv tag nrho;
  • Txuas ntxiv kev paub cov ntsiab lus ntawm yav tom ntej C ++ 2a tus qauv. Piv txwv li, muaj peev xwm suav nrog ntau yam thaum pib pib tau ntxiv, txuas ntxiv rau lambda kab lus tau siv, kev txhawb nqa rau cov tswv cuab khoob ntawm cov ntaub ntawv cov qauv thiab cov cwj pwm zoo / tsis zoo tau raug ntxiv, muaj peev xwm hu rau cov haujlwm virtual hauv cov lus qhia tau muab. , lwm.
    Txhawm rau pab txhawb C ++ 2a, siv qhov "-std = c ++ 2a" thiab "-std = gnu ++ 2a" kev xaiv. Ntxiv me ntsis thiab version header cov ntaub ntawv rau libstdc ++ rau C ++ 2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible thiab std::type_identity traits, std::midpoint, std::lerp functions , std::ib_front,
    std::visit, std::is_constant_evaluated thiab std:: assume_aligned, ntxiv kev txhawb nqa rau hom char8_t, siv lub peev xwm los xyuas cov lus ua ntej thiab cov lus xaus ntawm cov hlua (starts_with, ends_with);

  • Ntxiv kev txhawb nqa rau ARM processors tshiab
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ loj.LITTLE thiab Neoverse N1. Ntxiv kev txhawb nqa rau cov lus qhia qhia hauv Armv8.3-A rau kev ua haujlwm nrog cov lej nyuaj, pseudo-random naj npawb tsim (rng) thiab nco tagging (memtag), nrog rau cov lus qhia rau kev thaiv kev tawm tsam cuam tshuam txog kev ua tiav thiab kev ua haujlwm ntawm ceg twv ua ntej. . Rau AArch64 architecture, hom kev tiv thaiv tau ntxiv kev sib tshuam ntawm pawg thiab heap ("-fstack-clash-tiv thaiv"). Txhawm rau siv cov yam ntxwv ntawm Armv8.5-A architecture, qhov kev xaiv "-march = armv8.5-a" tau ntxiv

  • Nws suav nrog lub backend rau tsim cov cai rau AMD GPUs raws li GCN microarchitecture. Qhov kev siv tam sim no txwv rau kev muab tso ua ke ntawm ib leeg-xov daim ntawv thov (kev txhawb nqa rau kev ua tiav ntau cov xov tooj ntawm OpenMP thiab OpenACC yuav muab tom qab) thiab kev txhawb nqa rau GPU Fiji thiab Vega 10;
  • Ntxiv tshiab backend rau processors OpenRISC;
  • Ntxiv backend rau processors C-SKY V2, ua los ntawm Suav tuam txhab ntawm tib lub npe rau ntau yam khoom siv;
  • Tag nrho cov kev xaiv kab hais kom ua uas ua haujlwm byte qhov tseem ceeb txhawb cov lus kawg kb, KiB, MB, MiB, GB thiab GiB;
  • Ua tiav qhov "-flive-patching = [inline-only-static|inline-clone]" kev xaiv tso cai rau koj kom ua tiav kev sib sau ua ke rau kev nyob-patching systems vim muaj ntau theem tswj kev siv cov txheej txheem sib txuas (IPA) optimizations;
  • Ntxiv "--ua tiav" kev xaiv rau nplua-grained tswj kev xaiv tiav thaum siv bash;
  • Cov cuab yeej tshuaj ntsuam xyuas muab cov lus qhia ntawm cov ntawv sau excerpts qhia tus lej kab thiab pom cov ntaub ntawv cuam tshuam nrog, xws li hom operand. Txhawm rau lov tes taw cov kab xov tooj thiab cov ntawv lo, cov kev xaiv "-fno-diagnostics-show-line-numbers" thiab "-fno-diagnostics-show-labels" yog muab;

    Tso tawm ntawm GCC 9 compiler suite

  • Nthuav cov cuab yeej rau kev kuaj xyuas qhov yuam kev hauv C ++ code, txhim kho kev nyeem tau ntawm cov ntaub ntawv hais txog qhov ua rau yuam kev thiab tseem ceeb ntawm cov teeb meem tsis zoo;

    Tso tawm ntawm GCC 9 compiler suite

  • Ntxiv kev xaiv β€œ-fdiagnostics-format=json”, uas tso cai rau tsim cov tshuaj ntsuam xyuas cov zis hauv tshuab nyeem tau (JSON);
  • Ntxiv cov kev xaiv tshiab profile "-fprofile-filter-files" thiab "-fprofile-exclude-files" xaiv cov ntaub ntawv los ua tiav;
  • Chaw nyob Sanitizer muab cov cim kev txheeb xyuas ntau dua rau kev hloov pauv tsis siv neeg, uas txo qis kev nco txog ntawm cov ntaub ntawv executable raug kuaj;
  • Txhim kho cov zis hauv "-fopt-infoΒ» (cov ntaub ntawv nthuav dav txog kev txhim kho ntxiv). Ntxiv cov prefix tshiab "optimized" thiab "tsis nco qab", ntxiv rau yav tas los muaj prefix "sau". Ntxiv cov zis ntawm cov ntaub ntawv hais txog kev txiav txim siab ntawm inline-unfolding thiab vectorization ntawm cycles;
  • Ntxiv qhov "-fsave-optimization-record" kev xaiv, thaum teev tseg, GCC khaws cov ntaub ntawv SRCFILE.opt-record.json.gz nrog cov lus piav qhia ntawm kev txiav txim siab ntawm kev siv qee yam kev ua kom zoo. Qhov kev xaiv tshiab txawv ntawm hom "-fopt-info" los ntawm kev suav nrog cov metadata ntxiv, xws li cov ntaub ntawv hais txog cov profile thiab cov chains inline;
  • Ntxiv cov kev xaiv "-fipa-stack-alignment" thiab "-fipa-reference-addressable" los tswj pawg kev sib raug zoo thiab kev siv hom chaw nyob (sau-tsuas lossis nyeem-qhib) rau qhov hloov pauv zoo li qub thaum lub sijhawm kev ua haujlwm zoo;
  • Cov haujlwm tshiab tsim tau raug qhia los tswj hwm tus cwj pwm khi nrog rau kev coj tus cwj pwm cuam tshuam nrog ceg kwv yees thiab kev ua tiav cov lus qhia: "__builtin_has_attributeΒ«,Β«__builtin_expect_with_probability"Thiab"__builtin_speculation_safe_value". Ib tus cwj pwm tshiab tau ntxiv rau kev ua haujlwm, hloov pauv thiab hom daim ntawv;
  • Kev them nyiaj yug tag nrho rau asynchronous input / output tau ua tiav rau hom lus Fortran;
  • Kev them nyiaj yug rau Solaris 10 (*-*-solaris2.10) thiab Cell/BE (Cell Broadband Engine SPU) platforms tau raug deprecated thiab yuav raug tshem tawm hauv qhov kev tso tawm loj tom ntej. Kev them nyiaj yug rau Armv2, Armv3, Armv5 thiab Armv5E architectures tau raug txiav lawm. Kev them nyiaj yug rau Intel MPX (Memory Protection Extensions) tau raug txiav lawm.

Tau qhov twg los: opennet.ru

Ntxiv ib saib