Siideynta GCC 9 compiler suite

Sanad ka dib horumarka la daabacay soo daynta koox-kooxeedyo bilaash ah GCC 9.1, sii dayntii ugu horeysay ee weyn ee laanta cusub ee GCC 9.x. Sida waafaqsan nidaam cusub nambarada sii deynta, nooca 9.0 ayaa loo adeegsaday geeddi-socodka horumarinta, wax yar ka hor inta aan la sii dayn GCC 9.1, laanta GCC 10.0 ayaa mar hore la sii daysay, taas oo ku saleysan siideynta soo socota ee muhiimka ah, GCC 10.1, ayaa la samayn doonaa.

GCC 9.1 waxay caan ku tahay xasilinta taageerada heerka C++17, sii wadida fulinta awoodaha mustaqbilka C++20 (loomagacaabay C++2a), ku darida afka hore ee D, taageero qayb ah OpenMP 5.0 , ku dhawaad ​​dhamaystirka taageerada OpenACC 2.5, kordhinta scalability of optimizations interprocedural iyo hagaajinta marxaladda xidhitaan, ballaarinta qalab ogaanshaha iyo kordhinta digniino cusub, backend for OpenRISC, C-SKY V2 iyo AMD GCN GPU.

Main isbedel:

  • Taageero dheeri ah oo loogu talagalay luqadda barnaamijka D. GCC waxaa ku jira gees hore oo leh qalabeeye GDC (Gnu D Compiler) iyo maktabadaha runtime (libphobos), kuwaas oo kuu ogolaanaya inaad isticmaasho heerka GCC si aad u dhisto barnaamijyada luqadda barnaamijyada D. Habka awood u siin D ee taageerada luqadda ee GCC ayaa bilaabmay dib u 2011, laakiin lagu jiiday iyada oo ay ugu wacan tahay baahida loo qabo in la keeno koodhka waafaqsan shuruudaha GCC iyo dhibaatooyinka wareejinta xuquuqda hantida garaadka ee Mars Dijital ah, kaas oo horumarinaya luqadda barnaamijka D;
  • Hagaajinta waxaa lagu sameeyay koronto dhaliyaha koodka. Tusaale ahaan, adeegsiga xeelado kala duwan oo lagu ballaarinayo tibaaxaha beddelka (miiska ka bood, tijaabinta yar, geedka go'aanka) iyadoo ku xiran xaaladaha ayaa la hirgeliyay. Waxaa lagu daray awoodda lagu beddelo hawlaha toosan oo ay ku jiraan odhaahda beddelka iyadoo la adeegsanayo "-ftree-switch-conversion" hagaajinta (tusaale, shuruudo sida "xaaladda 2: how = 205; break; case 3: how = 305; break ;" waxaa loo rogi doonaa "100 * sidee + 5";
  • Hagaajinta habraaca isdhexgalka oo la hagaajiyay. Dejinta dejinta khadka dhexda ayaa loo habeeyey codebaseyada casriga ah ee C++ waxaana lagu balaadhiyey qiyaaso cusub max-inline-insns-small, max-inline-insns-size, function-inlined-function-insns, uninline-function-time, uninlined-thunk-insns iyo uninline -waqti-xumo. Saxnaanta la hagaajiyay iyo gardarrada kala soocida koodka qabow/kulanka. Miisaanka la hagaajiyay ee aad u weyn unugyada turjumaada (tusaale ahaan, markaad codsanayso hagaajinta marxaladda isku xirka barnaamijyada waaweyn);
  • Habka wanaajinta ee ku salaysan natiijooyinka sifada koodhka (PGO-profile-guided optimization) waa la hagaajiyay, kaas oo soo saara kood aad u wanaagsan oo ku salaysan falanqaynta sifooyinka fulinta code. Xulashada kooban"-fprofile-isticmaalka" hadda waxaa ku jira qaababka hagaajinta "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-iyo-jam" iyo "-ftree-loop-qaybinta". Waxaa la saaray ku darista histograms oo leh xisaabiyeyaasha faylalka, taas oo hoos u dhigtay xajmiga faylasha leh profiles (histograms hadda waxaa la soo saaray duullimaad marka la samaynayo hagaajinta inta lagu jiro isku xirka);
  • Kordhinta Isku xidhka Wakhtiga Hagaajinta (LTO). Fududeynta noocyada ayaa la bixiyay ka hor inta aan la dhalin natiijada, taas oo suurtogal ka dhigtay in si weyn loo yareeyo xajmiga galka sheyga LTO, la yareeyo isticmaalka xusuusta marxaladda xiritaanka, iyo hagaajinta isbarbardhigga hawlaha. Tirada qaybaha (-param lto-partitions) ayaa laga kordhiyey 32 ilaa 128, taas oo wanaajisa waxqabadka nidaamyada leh tiro badan oo ah dunta CPU. Halbeeg ayaa lagu daray si loo xakameeyo tirada habraacyada hagaajinta
    "-param lto-max-streaming-parallelism";

    Natiijo ahaan, marka la barbar dhigo GCC 8.3, hagaajinta lagu soo bandhigay GCC 9 ogol yahay hoos u dhig wakhtiga isku-darka Firefox 5 iyo LibreOffice 66 ilaa 6.2.3%. Baaxadda galka shayga ayaa hoos u dhacay 7%. Waqtiga xidhitaanka 8-core CPU ayaa hoos u dhacay 11%. Marxaladda hagaajinta isku xigxiga ee marxaladda isku xidhka hadda waa 28% dhakhso badan waxayna isticmaashaa 20% xasuus yar. Isticmaalka xusuusta ee processor kasta oo ka mid ah marxaladda isbarbardhigga ee LTO ayaa hoos u dhacday 30%;

  • Inta badan qeexitaanka barmaamijyada barbar socda waxa loo hirgeliyay luqadaha C, C++ iyo Fortran FurACC 2.5, kaas oo qeexaya aaladaha lagu rari karo hawlaha GPU-yada iyo soo-saareyaal khaas ah sida NVIDIA PTX;
  • Taageerada qayb ahaan heerka waxa loo hirgeliyay C iyo C++ FurMP 5.0 (Open Multi-Processing), kaas oo qeexaya API iyo hababka lagu dabaqo hababka barnaamijka barbar socda ee C, C ++ iyo luqadaha Fortran ee multi-core iyo hybrid (CPU + GPU / DSP) oo leh xusuusta la wadaago iyo unugyada vectorization (SIMD) ;
  • Digniino cusub ayaa lagu daray luqadda C: "-Wadar-ka-koob-xubin-xubin"(qiimaha tilmaame aan toosnayn ee xubin la soo buuxiyay oo ka tirsan qaab dhismeedka ama ururka) iyo
    Β«-Wabsolute-qiimaha"(marka lahelayo hawlaha xisaabinta qiimaha saxda ah, haddii ay jirto shaqo ku habboon doodda la cayimay, tusaale ahaan, fabs (3.14) waa in la isticmaalo halkii abs (3.14). Digniino cusub oo lagu daray C++: "- Nuqul-qorid",
    "-Winit-list-nolosha", "--dhaqdhaqaaqa-dhaqdhaqaaqa", "-Wpessimizing- dhaqaaq" iyo "--beddelka-Wclass". Digniino badan oo horay loo heli jiray ayaa la ballaariyay;

  • Taageero tijaabo ah oo lagu daray qayb ka mid ah mustaqablka luqadda C, oo magaceedu yahay C2x. Si aad awood ugu siiso taageerada C2x, adeegso xulashooyinka "-std=c2x" iyo "-std=gnu2x" (si aad awood ugu siiso kordhinta GNU). Heerarka ayaa weli ku jira marxaladda hore ee horumarinta, sidaas darteed, awooddeeda, kaliya ereyga _Static_assert oo leh hal dood ayaa la taageeray (_Static_assert oo leh laba doodood ayaa lagu jaangooyay C11);
  • Taageerada heerka C++17 ayaa lagu dhawaaqay mid xasiloon. Xagga hore, awoodaha luqadda ee C++17 si buuxda ayaa loo fuliyaa, iyo libstdc++, hawlaha maktabadda ee lagu qeexay heerka waxay ku dhow yihiin hirgelinta buuxda;
  • Sii wad hirgelinta walxaha mustaqbalka C++2a standard. Tusaale ahaan, awoodda lagu daro kala duwanaanta inta lagu jiro bilowga ayaa lagu daray, kordhinta tibaaxaha lambda ayaa la hirgeliyay, taageerada xubnaha madhan ee qaab-dhismeedka xogta iyo sifooyin macquul ah / aan macquul ahayn ayaa lagu daray, awoodda loogu yeero hawlaha farsamada ee tibaaxaha shuruudaha ayaa la bixiyay iwm.
    Si aad awood ugu siiso taageerada C++2a, isticmaal "-std=c++2a" iyo "-std=gnu++2a" doorashooyinka. Faylasha madaxa ee xoogaa lagu daray iyo nooca nooca libstdc ++ ee C ++2a, std :: ka saar_cvref, std :: unwrap_reference, std :: unwrap_decay_ref, std :: is_nothrow_convertible iyo std :: nooca_aqoonsiga, std :: midpoint, std :: , std :: bind_hore,
    std :: booqasho, std :: is_constant_la qiimeeyay iyo std :: qiyaasi_aligned, taageero lagu daray nooca char8_t, hirgaliyay awoodda lagu hubinayo horgalaha iyo daba-galka xargaha (bilawga_, ku dhamaanaya_);

  • Taageero lagu daray soo-saareyaasha cusub ee ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE iyo Neoverse N1. Taageero dheeri ah oo loogu talagalay tilmaamaha lagu soo bandhigay Armv8.3-A ee ku shaqeynta nambarada adag, jiilka lambarka random-ka (rng) iyo calaamadaynta xusuusta (memtag), iyo sidoo kale tilmaamo lagu xakameynayo weerarrada la xiriira fulinta mala-awaalka ah iyo hawlgalka qaybta saadaasha laanta . Qaab dhismeedka AArch64, qaab ilaalin ayaa lagu daray isgoysyada isgoysyada iyo tuullada ("-fstack-cash-ilaalinta"). Si loo isticmaalo sifooyinka dhismaha Armv8.5-A, doorashada "-march=armv8.5-a" ayaa lagu daray

  • Waxaa ka mid ah dhabarka soo saarista koodka AMD GPUs ee ku salaysan GCN microarchitecture. Hirgelinta hadda waxay ku kooban tahay isku-dubbaridka codsiyada hal-xadhkaha leh (taageerada fulinta xisaabinta xadhkaha badan ee OpenMP iyo OpenACC ayaa la bixin doonaa mar dambe) iyo taageerada GPU Fiji iyo Vega 10;
  • Waxaa lagu daray soo-saareyaal cusub FurRISC;
  • dhabarka lagu daray soo-saareyaal C-SKY V2, oo ay soo saartay shirkadda Shiinaha ee isku magaca ah ee qalabka macaamiisha ee kala duwan;
  • Dhammaan xulashooyinka khadka taliska ee ku shaqeeya qiyamka byte-ka waxay taageerayaan daba-galka kb, KiB, MB, MiB, GB iyo GiB;
  • La fuliyay Xulashada "-flive-patching=[inline-only-static|inline-clone]" waxay kuu ogolaaneysaa inaad gaarto isku-dubarid badbaado leh oo loogu talagalay nidaamyada-patching-ka tooska ah sababtoo ah koontaroolka heerarka badan ee isticmaalka hababka dhexdhexaadinta (IPA) hagaajinta;
  • Lagu daray "--dhammaystirka" ikhtiyaarka xakamaynta-fudud ee dhamaystirka doorashada marka la isticmaalayo bash;
  • Aaladaha ogaanshaha waxay bixiyaan bandhigyo qoraallada isha ee tilmaamaya lambarka khadka iyo calaamadaynta macluumaadka la xidhiidha muuqaal ahaan, sida noocyada operand-ka. Si loo joojiyo muujinta tirooyinka laynka iyo sumadaha, xulashooyinka "-fno-diagnostics-show-line-numbers" iyo "-fno-diagnostics-show-labels" ayaa la bixiyaa;

    Siideynta GCC 9 compiler suite

  • Balaaray qalabyada lagu ogaanayo khaladaadka ku jira C++ code, wanaajinta akhrinta macluumaadka ku saabsan sababaha khaladaadka iyo muujinta xuduudaha dhibaatada leh;

    Siideynta GCC 9 compiler suite

  • Ikhtiyaarka lagu daray "-fdiagnostics-format=json", kaas oo u oggolaanaya soo saarida wax soo saarka ogaanshaha qaabka mashiinka-la akhriyi karo (JSON);
  • Waxaa lagu daray doorashooyin cusub oo sifayn ah "-fprofile-filter-files" iyo "-fprofile-exclude-files" si loo doorto faylalka isha si loo habeeyo;
  • AddressSanitizer wuxuu bixiyaa jiilka koodka xaqiijinta is haysta ee doorsoomayaal toos ah, kaas oo yareynaya isticmaalka xusuusta ee faylka la hubin karo;
  • Wax soo saarka la hagaajiyay ee "-fopt-infoΒ» (macluumaad faahfaahsan oo ku saabsan hagaajinta lagu daray). Lagu daray horgalayaasha cusub "la hagaajiyey" iyo "la seegay", marka lagu daro horgalayaasha hore ee "note". Wax-soo-saarka lagu daray ee ku saabsan go'aan-qaadashada khadka-soo-bandhigidda iyo wareegga wareegga;
  • Lagu daray ikhtiyaarka "-fsave-optimization-ricord", marka la cayimo, GCC waxay kaydisaa faylka SRCFILE.opt-record.json.gz oo wata sharraxaad go'aannada isticmaalka wanaajinta qaarkood. Doorashada cusubi way ka duwan tahay qaabka "-fopt-info" iyadoo lagu darayo xog badan oo dheeraad ah, sida macluumaadka ku saabsan astaanta iyo silsiladaha xariiqda;
  • Ikhtiyaarada lagu daray "-fipa-stack-alignment" iyo "-fipa-reference-addressable" si loo xakameeyo isku xidhka xidhmooyinka iyo isticmaalka hababka wax looga qabanayo (qor-kaliya ama akhri-sax ah) ee doorsoomayaal taagan inta lagu jiro hagaajinta isdhexgalka;
  • Shaqooyin cusub oo gudaha ah ayaa loo soo bandhigay si loo xakameeyo isku-xidhka sifada iyo sidoo kale hab-dhaqanka la xidhiidha saadaasha laanta iyo fulinta tilmaamaha: "__builtin_wuxuu leeyahay sifoΒ«,Β«__builtin_filayo_leh"iyo"__builtin_speculation_safe_value" Sifo cusub ayaa lagu soo kordhiyey shaqooyinka, doorsoomayaasha iyo noocyada nuqul;
  • Taageero buuxda oo ku saabsan gelinta/soo-saarka asynchronous ayaa loo hirgeliyay luqadda Fortran;
  • Taageerada Solaris 10 (*-*-solaris2.10) iyo Cell/BE (Cell Broadband Engine SPU) waa la joojiyay waxaana laga saari doonaa soo daynta weyn ee soo socota. Taageerada dhismayaasha Armv2, Armv3, Armv5 iyo Armv5E waa la joojiyay. Taageerada Intel MPX (Extensions Ilaalinta Xusuusta) waa la joojiyay.

Source: opennet.ru

Add a comment