Kutulutsidwa kwa GCC 9 compiler suite

Pambuyo pa chaka cha chitukuko losindikizidwa kumasulidwa kwa gulu laulere la compilers GCC 9.1, kutulutsidwa kwakukulu koyamba munthambi yatsopano ya GCC 9.x. Malinga ndi dongosolo latsopano manambala otulutsidwa, mtundu wa 9.0 unagwiritsidwa ntchito panthawi yachitukuko, ndipo patangopita nthawi yochepa kuti GCC 9.1 itulutsidwe, nthambi ya GCC 10.0 inali itayamba kale, pamaziko omwe kumasulidwa kotsatira, GCC 10.1, kudzapangidwa.

GCC 9.1 ndiyodziwikiratu pakukhazikika kwa chithandizo cha C++17, kupitiliza kugwiritsa ntchito kuthekera kwa C++20 standard (codenamed C++2a), kuphatikiza kutsogolo kwa chilankhulo cha D, kuthandizira pang'ono kwa OpenMP 5.0 , pafupifupi thandizo lathunthu la OpenACC 2.5, kuwonjezera kukhathamiritsa kwa kukhathamiritsa kwapang'onopang'ono ndi kukhathamiritsa pamlingo womangiriza, kukulitsa zida zowunikira komanso kuwonjezera machenjezo atsopano, ma backends a OpenRISC, C-SKY V2 ndi AMD GCN GPU.

waukulu kusintha:

  • Thandizo lowonjezera la chinenero cha pulogalamu ya D. GCC imaphatikizapo kutsogolo ndi compiler GDC (Gnu D Compiler) ndi malaibulale othamanga (libphobos), omwe amakulolani kugwiritsa ntchito GCC yokhazikika kupanga mapulogalamu m'chinenero cha pulogalamu ya D. Njira yothandizira kuthandizira chinenero cha D mu GCC wayamba mu 2011, koma kukokera patsogolo chifukwa chofuna kubweretsa codeyo kuti igwirizane ndi zofunikira za GCC ndi mavuto ndi kusamutsidwa kwa ufulu waumwini ku Digital Mars, yomwe ikupanga chinenero cha D;
  • Kusintha kwapangidwa kwa code jenereta. Mwachitsanzo, kugwiritsa ntchito njira zosiyanasiyana pakukulitsa mawu a Sinthani (dumpha tebulo, kuyesa pang'ono, mtengo wosankha) kutengera momwe zinthu zakhalira. Onjezani kuthekera kosintha magwiridwe antchito omwe amaphatikiza mawu osinthira pogwiritsa ntchito kukhathamiritsa kwa "-ftree-switch-conversion" (mwachitsanzo, mikhalidwe ngati "mlandu 2: momwe = 205; break; mlandu 3: momwe = 305; break ;” adzasinthidwa kukhala "100 * bwanji + 5";
  • Kukhathamiritsa kwa interprocedural. Zokonda zotumizira ma inline zidasinthidwa kukhala ma codebase amakono a C++ ndikukulitsidwa ndi magawo atsopano max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns ndi osadziwika. - nthawi yopuma. Kuwongolera kolondola komanso mwaukali pakulekanitsa kozizira / kotentha. Kupititsa patsogolo scalability kwa zazikulu kwambiri magawo omasulira (mwachitsanzo, mukamagwiritsa ntchito kukhathamiritsa pagawo lolumikizirana ndi mapulogalamu akulu);
  • Makina okhathamiritsa potengera zotsatira za mbiri ya ma code (PGO - Profile-guided optimization) yasinthidwa, yomwe imapanga code yabwino kwambiri kutengera kusanthula kwa machitidwe a code. Chidule njira "-fprofile-kugwiritsa ntchito" tsopano ikuphatikiza njira zokometsera "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ndi "-ftree-loop-distribution". Anachotsa kuphatikizika kwa histograms ndi zowerengera mu owona, amene anachepetsa kukula kwa owona ndi mbiri (histograms tsopano kwaiye ntchentche pamene kuchita optimizations pa kulumikiza);
  • Kukhathamiritsa Kwa Nthawi Yogwirizanitsa (LTO). Kuphweka kwa mitundu kunaperekedwa musanapange zotsatira, zomwe zinapangitsa kuti kuchepetsa kwambiri kukula kwa mafayilo a chinthu cha LTO, kuchepetsa kukumbukira kukumbukira panthawi yomangiriza, ndikuwongolera kufanana kwa ntchito. Chiwerengero cha magawo (-param lto-partitions) chawonjezeka kuchoka pa 32 kufika ku 128, zomwe zimathandizira magwiridwe antchito pamakina okhala ndi ulusi wambiri wa CPU. Parameter yawonjezedwa kuwongolera kuchuluka kwa njira zowonjezera
    "-param lto-max-streaming-parallelism";

    Zotsatira zake, poyerekeza ndi GCC 8.3, kukhathamiritsa komwe kunayambitsidwa mu GCC 9 kuloledwa chepetsani nthawi yophatikiza Firefox 5 ndi LibreOffice 66 pafupifupi 6.2.3%. Kukula kwa mafayilo azinthu kudatsika ndi 7%. Nthawi yomanga pa 8-core CPU idatsika ndi 11%. Gawo lokonzekera motsatizana la gawo lolumikizira tsopano ndi 28% mwachangu ndipo limawononga 20% kukumbukira pang'ono. Kugwiritsa ntchito kukumbukira kwa purosesa iliyonse ya gawo lofananira la LTO kunatsika ndi 30%;

  • Zambiri zamapulogalamu ofanana zimakhazikitsidwa m'zilankhulo za C, C++ ndi Fortran OpenACC 2.5, yomwe imatanthauzira zida zotsitsa ntchito pa GPUs ndi mapurosesa apadera monga NVIDIA PTX;
  • Kuthandizira pang'ono kwa muyezo kwakhazikitsidwa kwa C ndi C ++ Pulogalamu ya OpenMP 5.0 (Open Multi-Processing), yomwe imatanthawuza API ndi njira zogwiritsira ntchito njira zofananira zamapulogalamu a C, C++ ndi Fortran m'zilankhulo zamitundu yambiri komanso zosakanizidwa (CPU+GPU/DSP) zomwe zimagawana kukumbukira ndi mayunitsi a vectorization (SIMD) ;
  • Machenjezo atsopano awonjezedwa pachilankhulo cha C: "-Wadiresi-ya-odzaza-membala" (mtengo wa pointer wosagwirizana ndi membala wodzaza gulu kapena mgwirizano) ndi
    Β«-Wabsolute-value" (popeza ntchito zowerengera mtengo wokwanira, ngati pali ntchito yoyenera kwambiri pa mkangano womwe watchulidwa, mwachitsanzo, ma fabs (3.14) ayenera kugwiritsidwa ntchito m'malo mwa abs (3.14). Machenjezo atsopano owonjezera a C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" ndi "-Wclass-conversion". Machenjezo ambiri omwe analipo kale awonjezedwa;

  • Anawonjezedwa zoyeserera za gawo lamtsogolo la chilankhulo cha C, lotchedwa C2x. Kuti mutsegule chithandizo cha C2x, gwiritsani ntchito zosankha "-std=c2x" ndi "-std=gnu2x" (kuti mutsegule zowonjezera za GNU). Muyezo udakali pachiyambi cha chitukuko, choncho, mphamvu zake, mawu okhawo _Static_assert ndi mtsutso umodzi amathandizidwa (_Static_assert ndi zifukwa ziwiri ndizovomerezeka mu C11);
  • Kuthandizira kwa C++17 muyezo kwanenedwa kukhala kokhazikika. Pamapeto pake, kuthekera kwa chilankhulo cha C ++ 17 kumayendetsedwa bwino, ndipo mu libstdc ++, ntchito za library zomwe zafotokozedwa mulingo zili pafupi kukhazikitsidwa kwathunthu;
  • Kupitilira kukhazikitsa zinthu zamtsogolo C ++2a muyezo. Mwachitsanzo, kuthekera kophatikiza magawo pakuyambitsa kwawonjezedwa, zowonjezera za mawu a lambda zakhazikitsidwa, kuthandizira kwa mamembala opanda kanthu pamapangidwe a data ndi zomwe mwina / zosayembekezereka zawonjezedwa, kuthekera koyimba ntchito zenizeni m'mawu ovomerezeka kwaperekedwa. , ndi zina.
    Kuti muthandize C++2a, gwiritsani ntchito "-std=c++2a" ndi "-std=gnu++2a". Mafayilo owonjezera pang'ono ndi mtundu ku libstdc++ kwa C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ndi std::type_identity mikhalidwe: midler, pdst: , std::bind_front,
    std:: visit, std::is_constant_evaluated and std::assume_aligned, thandizo lowonjezera la char8_t charXNUMX_t, lakhazikitsa kuthekera koyang'ana choyambirira ndi zomata za zingwe (kuyambira_ndi, kutha_ndi);

  • Thandizo lowonjezera la mapurosesa atsopano a ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ yaikulu.LITTLE ndi Neoverse N1. Thandizo lowonjezera pamalangizo omwe adayambitsidwa mu Armv8.3-A pogwira ntchito ndi manambala ovuta, pseudo-random number generation (rng) ndi memory tagging (memtag), komanso malangizo oletsa ziwopsezo zokhudzana ndi kuphedwa mongopeka komanso magwiridwe antchito a nthambi yolosera. . Pazomangamanga za AArch64, njira yodzitchinjiriza yawonjezedwa mphambano za mulu ndi mulu ("-fstack-clash-protection"). Kuti mugwiritse ntchito mawonekedwe a Armv8.5-A, njira "-march=armv8.5-a" yawonjezedwa.

  • Zimaphatikizanso kumbuyo kwa ma code a AMD GPU kutengera GCN microarchitecture. Kukhazikitsaku kumangokhala pakuphatikiza kwa ulusi umodzi (kuthandizira kuwerengera kwamitundu yambiri kudzera pa OpenMP ndi OpenACC kudzaperekedwa pambuyo pake) ndikuthandizira GPU Fiji ndi Vega 10;
  • Anawonjezera kumbuyo kwatsopano kwa mapurosesa OpenRISC;
  • Wowonjezera kumbuyo kwa ma processor C-SKY V2, opangidwa ndi kampani yaku China ya dzina lomwelo pazida zosiyanasiyana za ogula;
  • Zosankha zonse zamalamulo zomwe zimagwiritsa ntchito ma byte zimathandizira ma suffixes kb, KiB, MB, MiB, GB ndi GiB;
  • Zakhazikitsidwa njira ya "-flive-patching=[inline-only-static|inline-clone]" imakupatsani mwayi wophatikiza zotetezedwa zamakina ophatikizira moyo chifukwa chakuwongolera kwamagawo angapo pakugwiritsa ntchito njira zolumikizirana (IPA) kukhathamiritsa;
  • Chowonjezera cha "--completion" chowongolera bwino pakumaliza kusankha mukamagwiritsa ntchito bash;
  • Zida zowunikira zimapereka mawonetsedwe a zolemba zoyambira zomwe zikuwonetsa nambala ya mzere ndi zidziwitso zokhudzana ndi zowonera, monga mitundu ya operand. Kuti mulepheretse kuwonetsa manambala a mzere ndi zolemba, zosankha "-fno-diagnostics-show-line-numbers" ndi "-fno-diagnostics-show-labels" zimaperekedwa;

    Kutulutsidwa kwa GCC 9 compiler suite

  • Zokulitsidwa zida zowunikira zolakwika mu code C ++, kuwerengera bwino kwazomwe zimayambitsa zolakwika ndikuwunikira magawo ovuta;

    Kutulutsidwa kwa GCC 9 compiler suite

  • Njira yowonjezera "-fdiagnostics-format = json", yomwe imalola kutulutsa zowunikira mumtundu wowerengeka ndi makina (JSON);
  • Zosankha zatsopano za mbiri "-fprofile-filter-files" ndi "-fprofile-exclude-mafayilo" kuti musankhe mafayilo omwe akuyenera kusinthidwa;
  • AddressSanitizer imapereka m'badwo wamakhodi otsimikizika ophatikizika pazosintha zokha, zomwe zimachepetsa kukumbukira kwa fayilo yomwe ikuyenera kufufuzidwa;
  • Kutulutsa kwabwino mu "-fopt-infoΒ» (zambiri za kukhathamiritsa kowonjezera). Anawonjezera prefixes latsopano "wokometsedwa" ndi "anaphonya", kuwonjezera pa zomwe zinalipo kale "note". Zowonjezera zomwe zidziwitso pakupanga zisankho pakusintha kwapaintaneti ndi ma vectorization a kuzungulira;
  • Yawonjeza njira ya "-fsave-optimization-record", ikatchulidwa, GCC imasunga fayilo ya SRCFILE.opt-record.json.gz ndikulongosola zisankho pakugwiritsa ntchito kukhathamiritsa kwina. Njira yatsopanoyi imasiyana ndi "-fopt-info" mode pophatikizapo metadata yowonjezera, monga chidziwitso cha mbiri ndi maunyolo apakati;
  • Zosankha zowonjezera "-fipa-stack-alignment" ndi "-fipa-reference-addressable" kuti athe kuwongolera masanjidwe a stack ndi kugwiritsa ntchito njira zoyankhulirana (zolemba-zokha kapena zowerengera) pazosintha zosasunthika panthawi yokhathamiritsa;
  • Ntchito zatsopano zomangidwira zimayambitsidwa kuti ziwongolere zomwe zimamangiriridwa komanso machitidwe okhudzana ndi kulosera kwa nthambi ndi kutsata malangizo mongopeka: "__builtin_ali ndi_makhalidweΒ«,Β«__kumanga_kuyembekezera_ndi_kutheka"Ndipo"__builtin_speculation_safe_value". Makhalidwe atsopano awonjezedwa pazochita, zosinthika ndi mitundu munditumizire;
  • Thandizo lathunthu lothandizira / zotulutsa za asynchronous zakhazikitsidwa pachilankhulo cha Fortran;
  • Thandizo la nsanja za Solaris 10 (*-*-solaris2.10) ndi Cell/BE (Cell Broadband Engine SPU) zachotsedwa ndipo zidzachotsedwa kumasulidwa kwakukulu kotsatira. Thandizo la Armv2, Armv3, Armv5 ndi Armv5E zomangamanga zathetsedwa. Thandizo la Intel MPX (Memory Protection Extensions) lathetsedwa.

Source: opennet.ru

Kuwonjezera ndemanga