Divilgasyon suite konpilateur GCC 9 la

Apre yon ane nan devlopman pibliye lage yon seri konpilateur gratis GCC NAN, premye gwo lage nan nouvo branch GCC 9.x. An akò avèk nouvo konplo nimewo lage, yo te itilize vèsyon 9.0 nan pwosesis devlopman, ak yon ti tan anvan liberasyon GCC 9.1, branch GCC 10.0 te deja branch, sou baz pwochen lage enpòtan an, GCC 10.1, ta dwe fòme.

GCC 9.1 remakab pou estabilize sipò pou estanda C++17 la, kontinye aplike kapasite pwochen estanda C++20 (non kode C++2a), enklizyon nan entèfas pou lang D la, sipò pasyèl pou OpenMP 5.0. , sipò prèske nèt sou tout pwen pou OpenACC 2.5, ogmante évolutivité nan optimize entèprosedural ak optimize nan etap la obligatwa, ekspansyon nan zouti dyagnostik ak adisyon nan nouvo avètisman, backends pou OpenRISC, C-SKY V2 ak AMD GCN GPU.

Prensipal la chanjman:

  • Te ajoute sipò pou langaj pwogramasyon D. GCC gen ladann yon entèfas ak yon du GDC (Gnu D Compiler) ak bibliyotèk ekzekite (libphobos), ki pèmèt ou sèvi ak estanda GCC pou konstwi pwogram nan langaj pwogram D. Pwosesis pou pèmèt sipò lang D nan GCC. te kòmanse tounen nan 2011, men trennen sou akòz nesesite pou mete kòd la an konfòmite ak kondisyon GCC ak pwoblèm ak transfè a nan dwa pwopriyete entelektyèl nan Digital Mas, ki ap devlope lang nan pwogram D;
  • Amelyorasyon yo te fè nan dèlko kòd la. Pou egzanp, itilizasyon diferan estrateji pou elaji ekspresyon switch (tab so, tès bit, pye bwa desizyon) depann sou sitiyasyon yo te aplike. Te ajoute kapasite pou transfòme fonksyon lineyè ki gen ladan yon ekspresyon switch lè l sèvi avèk optimize "-ftree-switch-conversion" (pa egzanp, yon seri kondisyon tankou "ka 2: ki jan = 205; kraze; ka 3: ki jan = 305; kraze. ;” pral konvèti nan "100 * ki jan + 5";
  • Amelyore optimize entèprosedural. Anviwònman deplwaman yo te adapte pou baz kod C++ modèn yo epi yo te elaji ak nouvo paramèt max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns ak uninlined. -thunk-tan. Amelyore presizyon ak agresif nan separasyon kòd frèt / cho. Amelyore évolutivité pou gwo anpil inite tradiksyon (pa egzanp, lè w ap aplike optimize nan etap ki konekte ak gwo pwogram);
  • Mekanis optimize ki baze sou rezilta pwofil kòd (PGO - Profile-guided optimization) te amelyore, ki jenere plis kòd optimal ki baze sou yon analiz de karakteristik ekzekisyon kòd. Opsyon rezime "-fprofile-itilize"Kounye a gen ladan mòd optimize "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ak "-ftree-loop-distribution". Retire enklizyon de istogram ak kontè nan dosye, ki redwi gwosè a nan dosye ak pwofil (istogram yo kounye a se pwodwi sou vole a lè yo fè optimize pandan lyen);
  • Enhanced Linking Time Optimizations (LTO). Senplifikasyon nan kalite yo te bay anvan jenere rezilta a, ki te fè li posib siyifikativman diminye gwosè a nan dosye objè LTO, diminye konsomasyon memwa nan etap la obligatwa, ak amelyore paralelizasyon nan operasyon yo. Nimewo a nan patisyon (-param lto-partisyon) te ogmante soti nan 32 a 128, ki amelyore pèfòmans sou sistèm ki gen yon gwo kantite fil CPU. Yo te ajoute yon paramèt pou kontwole kantite pwosesis optimize yo
    "-param lto-max-streaming-parallelism";

    Kòm yon rezilta, konpare ak GCC 8.3, optimize yo prezante nan GCC 9 pèmèt redwi tan konpilasyon Firefox 5 ak LibreOffice 66 pa apeprè 6.2.3%. Gwosè dosye objè diminye pa 7%. Tan obligatwa sou yon CPU 8-debaz diminye pa 11%. Etap nan optimize sekans nan etap la ki lye se kounye a 28% pi vit ak konsome 20% mwens memwa. Konsomasyon memwa nan chak processeur nan etap nan paralelize nan LTO diminye pa 30%;

  • Pifò nan spesifikasyon pwogramasyon paralèl la aplike pou lang C, C++ ak Fortran OpenACC 2.5, ki defini zouti pou dechaje operasyon sou GPU ak processeurs espesyalize tankou NVIDIA PTX;
  • Sipò pasyèl pou estanda a te aplike pou C ak C++ Louvri MP 5.0 (Open Multi-Processing), ki defini API ak metòd pou aplike metòd pwogramasyon paralèl pou lang C, C++ ak Fortran sou sistèm milti-nwayo ak ibrid (CPU + GPU/DSP) ak memwa pataje ak inite vektorizasyon (SIMD) ;
  • Nouvo avètisman yo te ajoute pou lang C a: "-Waddress-of-chaje-manm"(Valè pointeur ki pa aliye nan yon manm chaje nan yon estrikti oswa sendika) ak
    «-Wabsolute-valè" (Lè w gen aksè nan fonksyon pou kalkile yon valè absoli, si gen yon fonksyon ki pi apwopriye pou agiman espesifye a, pou egzanp, fabs(3.14) ta dwe itilize olye pou yo abs (3.14). Nouvo avètisman te ajoute pou C++: "-Wdeprecated-copy",
    "-Winit-list-time", "-Wredundant-move", "-Wpessimizing-move" ak "-Wclass-conversion". Anpil avètisman ki te disponib deja yo te elaji;

  • Te ajoute sipò eksperimantal pou yon pati nan estanda lang C nan lavni, ki gen non kod C2x. Pou pèmèt sipò C2x, sèvi ak opsyon "-std=c2x" ak "-std=gnu2x" (pou pèmèt ekstansyon GNU). Estanda a toujou nan yon etap byen bonè nan devlopman, Se poutèt sa, nan kapasite li yo, se sèlman ekspresyon _Static_assert ak yon sèl agiman ki sipòte (_Static_assert ak de agiman estandadize nan C11);
  • Sipò pou estanda C++17 la te deklare estab. Nan entèfas a, kapasite langaj C++17 yo konplètman aplike, ak nan libstdc++, fonksyon bibliyotèk yo defini nan estanda a tou pre aplikasyon konplè;
  • Kontinye aplikasyon eleman nan lavni C++2a estanda. Pou egzanp, yo te ajoute kapasite pou enkli chenn pandan inisyalizasyon, ekstansyon pou ekspresyon lambda yo te aplike, sipò pou manm vid estrikti done yo ak atribi ki gen anpil chans/pa gen anpil chans yo te ajoute, yo te bay kapasite pou rele fonksyon vityèl nan ekspresyon kondisyonèl. , elatriye.
    Pou pèmèt sipò C++2a, sèvi ak opsyon "-std=c++2a" ak "-std=gnu++2a". Te ajoute dosye header ti jan ak vèsyon nan libstdc++ pou C++ 2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ak std::type_identity karakteristik, std::midpoint, std::lerp fonksyon , std::bind_front,
    std::visit, std::is_constant_evaluated ak std::assume_aligned, te ajoute sipò pou kalite char8_t, aplike kapasite pou tcheke prefiks ak sifiks fisèl (starts_with, ends_with);

  • Te ajoute sipò pou nouvo processeurs ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE ak Neoverse N1. Te ajoute sipò pou enstriksyon ki prezante nan Armv8.3-A pou travay ak nimewo konplèks, jenerasyon pseudo-o aza (rng) ak etikèt memwa (memtag), osi byen ke enstriksyon pou bloke atak ki gen rapò ak ekzekisyon spéculatif ak operasyon inite prediksyon branch lan. . Pou achitekti AArch64, yo te ajoute yon mòd pwoteksyon entèseksyon pil ak pil ("-fstack-clash-protection"). Pou itilize karakteristik achitekti Armv8.5-A a, opsyon "-march=armv8.5-a" te ajoute.

  • Li gen ladann yon backend pou jenere kòd pou GPU AMD ki baze sou mikrochitekti GCN. Aktyèlman aplikasyon an limite a konpilasyon aplikasyon yon sèl-threaded (sipò pou fè kalkil milti-thread atravè OpenMP ak OpenACC pral ofri pita) ak sipò pou GPU Fiji ak Vega 10;
  • Te ajoute nouvo backend pou processeurs OpenRISC;
  • Te ajoute backend pou processeurs C-SKY V2, ki te pwodwi pa konpayi Chinwa a menm non pou aparèy konsomatè divès kalite;
  • Tout opsyon liy lòd ki opere valè byte sipòte sifiks kb, KiB, MB, MiB, GB ak GiB;
  • Aplike "-flive-patching=[inline-only-static|inline-clone]" opsyon a pèmèt ou reyalize konpilasyon san danje pou sistèm patch vivan akòz kontwòl milti-nivo sou itilizasyon entèprosedural (Ipa) optimize;
  • Te ajoute opsyon "--completion" pou kontwòl amann nan fini opsyon lè w ap itilize bash;
  • Zouti dyagnostik yo bay ekspozisyon ekstrè tèks sous ki endike nimewo liy lan ak vizyèlman make enfòmasyon ki gen rapò, tankou kalite operand. Pou enfim ekspozisyon nimewo liy ak etikèt yo, opsyon "-fno-diagnostics-show-line-numbers" ak "-fno-diagnostics-show-labels" yo bay;

    Divilgasyon suite konpilateur GCC 9 la

  • Elaji zouti pou dyagnostik erè nan kòd C++, amelyore lizibilite enfòmasyon sou kòz erè yo ak mete aksan sou paramèt pwoblèm;

    Divilgasyon suite konpilateur GCC 9 la

  • Te ajoute opsyon "-fdiagnostics-format=json", ki pèmèt jenere pwodiksyon dyagnostik nan fòma machin-lizib (JSON);
  • Te ajoute nouvo opsyon pwofil "-fprofile-filter-files" ak "-fprofile-exclude-files" pou chwazi dosye sous yo dwe trete;
  • AddressSanitizer bay jenerasyon kòd verifikasyon plis kontra enfòmèl ant pou varyab otomatik yo, ki diminye konsomasyon memwa nan dosye ègzèkutabl yo tcheke;
  • Amelyore pwodiksyon nan "-fopt-info» (enfòmasyon detaye sou optimize te ajoute). Te ajoute nouvo prefiks "optimize" ak "manke", anplis de prefiks "nòt" ki te disponib deja. Te ajoute pwodiksyon enfòmasyon sou pran desizyon sou liy-dewoulman ak vektorizasyon sik;
  • Te ajoute opsyon "-fsave-optimization-record", lè yo espesifye, GCC sove fichye SRCFILE.opt-record.json.gz ak yon deskripsyon desizyon sou itilizasyon sèten optimize. Nouvo opsyon a diferan de mòd "-fopt-info" lè li gen ladan metadata adisyonèl, tankou enfòmasyon sou pwofil la ak chenn enline;
  • Te ajoute opsyon "-fipa-stack-alignment" ak "-fipa-reference-addressable" pou kontwole aliyman pil ak itilizasyon mòd adrès (ekri sèlman oswa lekti egzak) pou varyab estatik pandan optimize entèprosedi;
  • Nouvo fonksyon entegre yo prezante pou kontwole atribi obligatwa ak konpòtman ki gen rapò ak prediksyon branch ak ekzekisyon enstriksyon spéculatif: "__builtin_has_attribute«,«__bwiltin_expect_with_probability"Epi"__valè_sekirite_espekilasyon". Yo te ajoute yon nouvo atribi pou fonksyon, varyab ak kalite kopye;
  • Sipò konplè pou opinyon/sòti asynchrone yo te aplike pou lang Fortran la;
  • Sipò pou platfòm Solaris 10 (*-*-solaris2.10) ak Cell/BE (Cell Broadband Engine SPU) te obsève epi yo pral retire nan pwochen gwo lage a. Sipò pou achitekti Armv2, Armv3, Armv5 ak Armv5E sispann. Sipò pou Intel MPX (ekstansyon pwoteksyon memwa) sispann.

Sous: opennet.ru

Add nouvo kòmantè