Ħruġ tas-suite tal-kompilaturi GCC 10

Wara sena ta 'żvilupp ippubblikat rilaxx ta’ sett b’xejn ta’ kompilaturi GCC 10.1, l-ewwel rilaxx ewlieni fil-fergħa l-ġdida tal-GCC 10.x. Skond il skema ġdida numri tar-rilaxx, il-verżjoni 10.0 intużat matul il-proċess ta 'żvilupp, u ftit qabel ir-rilaxx ta' GCC 10.1, il-fergħa GCC 11.0 kienet diġà ramifikata, li fuq il-bażi tagħha tkun iffurmata r-rilaxx sinifikanti li jmiss, GCC 11.1.

GCC 10.1 huwa notevoli għall-implimentazzjoni ta 'ħafna innovazzjonijiet fil-lingwa C++ żviluppata għall-istandard C++ 20, titjib relatat mal-istandard futur tal-lingwa C (C2x), ottimizzazzjonijiet ġodda fil-backends tal-kompilatur u appoġġ sperimentali mod ta 'analiżi statika. Barra minn hekk, waqt il-preparazzjoni ta 'fergħa ġdida, il-proġett ittrasferixxa r-repożitorju minn SVN għal Git.

Il-prinċipali bidliet:

  • Miżjud mod sperimentali ta 'analiżi statika "-fanalizzatur", li twettaq analiżi interproċedurali li tuża ħafna riżorsi ta 'mogħdijiet ta' eżekuzzjoni tal-kodiċi u flussi ta 'dejta fi programm. Il-mod huwa kapaċi li jiskopri problemi fl-istadju tal-kumpilazzjoni, bħal sejħiet doppji għall-funzjoni ħielsa () għal żona waħda tal-memorja, tnixxijiet tad-deskritturi tal-fajls, dereferencing u tgħaddi pointers nulli, aċċess għal blokki tal-memorja meħlusa, użu ta 'valuri mhux inizjalizzati, eċċ. L-użu tal-mod il-ġdid għall-kodiċi OpenSSL diġà għamilha possibbli li tiġi identifikata vulnerabbiltà perikoluża.
  • Ottimizzazzjonijiet interproċedurali mtejba. Il-pass tal-IPA-SRA (Interprocedural Scalar Shared Replacement) ġie ddisinjat mill-ġdid biex jaħdem fil-ħin tal-irbit u, fost affarijiet oħra, issa jneħħi l-valuri mhux użati kkalkulati u rritornati. Fil-mod ta 'ottimizzazzjoni "-O2", l-għażla "-finline-functions" hija attivata, li hija rranġata biex tiffavorixxi kodiċi aktar kompatt fuq il-prestazzjoni tal-eżekuzzjoni. Ix-xogħol tal-euristika għall-iskjerament tal-funzjoni inline ġie aċċellerat. L-espansjoni inline u l-euristika tal-klonazzjoni tal-funzjoni issa jistgħu jużaw informazzjoni dwar firxiet ta 'valur biex ibassru l-effettività tat-trasformazzjonijiet individwali. Għal C++, il-preċiżjoni tal-parsing tal-alias ibbażat fuq it-tip tjiebet.
  • Ottimizzazzjonijiet Mtejba tal-Ħin tal-Konnessjoni (LTO). Miżjud eżekutibbli ġdid lto-dump biex tirrisettja l-informazzjoni dwar fajls ta 'oġġetti b'bytecode LTO. Passi paralleli tal-LTO jiddeterminaw awtomatikament in-numru ta 'kompiti ta' teħid simultanjament li jaħdmu u, jekk ma jistgħux jiġu determinati, uża informazzjoni dwar in-numru ta 'cores CPU bħala fattur ta' parallelizzazzjoni. Żid il-kapaċità li tikkompressa bytecode LTO billi tuża l-algoritmu zstd.
  • Il-mekkaniżmu ta 'ottimizzazzjoni bbażat fuq ir-riżultati tal-profiling tal-kodiċi (PGO - Profile-guided optimization) ġie mtejjeb, li jiġġenera kodiċi aktar ottimali bbażat fuq analiżi tal-karatteristiċi tal-eżekuzzjoni tal-kodiċi. Manutenzjoni mtejba tal-profil waqt il-kumpilazzjoni u s-separazzjoni tal-kodiċi sħun/kesħa. Permezz tal-għażla "-fprofile-values» issa jistgħu jimmonitorjaw sa 4 valuri tal-profil, pereżempju għal sejħiet indiretti u jipprovdu informazzjoni tal-profil aktar preċiża.
  • Speċifikazzjoni ta' programmazzjoni parallela implimentata għal-lingwi C, C++ u Fortran OpenACC 2.6, li jiddefinixxi għodod għall-ħatt ta' operazzjonijiet fuq GPUs u proċessuri speċjalizzati bħal NVIDIA PTX. L-implimentazzjoni tal-istandard hija kważi kompluta Iftaħ MP 5.0 (Open Multi-Processing), li jiddefinixxi l-API u l-metodi ta 'applikazzjoni ta' metodi ta 'programmar paralleli fuq sistemi multi-core u ibridi (CPU + GPU/DSP) b'unitajiet ta' memorja u vettorizzazzjoni kondiviża (SIMD). Karatteristiċi miżjuda bħal lastprivate conditionals, direttivi ta' skennjar u loop, espressjonijiet ta' ordni u use_device_addr. Għal OpenMP u OpenACC, ġie miżjud appoġġ għall-operazzjonijiet ta 'ħatt fuq GPUs AMD Radeon (GCN) tar-raba' ġenerazzjoni (Fiġi) u tal-ħames ġenerazzjoni (VEGA 10/VEGA 20).
  • Għal-lingwi tal-familja C, il-funzjoni "aċċess" ġiet miżjuda biex tiddeskrivi l-aċċess tal-funzjoni għal oġġetti mgħoddija b'referenza jew pointer, u biex tassoċja oġġetti bħal dawn ma 'argumenti sħaħ li fihom informazzjoni dwar id-daqs tal-oġġetti. Biex taħdem flimkien ma '"aċċess", l-attribut "tip" huwa implimentat biex jiskopri aċċess mhux korrett mill-funzjonijiet tal-utent, pereżempju, meta tikteb valuri f'żona barra l-limiti tal-firxa. Miżjud ukoll l-attribut "symver" biex jassoċja simboli f'fajl ELF ma' numri ta' verżjoni speċifiċi.
  • Twissijiet ġodda miżjuda:
    • “-Wstring-compare” (attivat b’“-Wextra”) - iwissi dwar il-preżenza ta’ espressjonijiet li fihom iż-żero jitqabbel mar-riżultat tas-sejħa tal-funzjonijiet strcmp u strncmp, li huwa ekwivalenti għal kostanti minħabba l-fatt li t-tul ta 'argument wieħed huwa akbar mid-daqs tal-firxa fit-tieni argument.
    • "-Wzero-length-bounds" (attivat b'"-Warray-bounds") - iwissi dwar l-aċċess ta' elementi ta' firxa ta' tul żero, li jista' jwassal għal kitba oħra ta' data oħra.
    • It-twissijiet “-Warray-bounds”, “-Wformat-overflow”, “-Wrestrict”, “-Wreturn-local-addr” u “-Wstringop-overflow” ġew estiżi biex jespandu n-numru ta’ sitwazzjonijiet barra mill-limiti. li jiġu ttrattati.
  • Implimenta l-abbiltà li jispeċifika direttament karattri wesgħin fl-identifikaturi bl-użu tal-kodifikazzjoni attwali (UTF-8 awtomatikament) aktar milli notazzjoni UCN (\uNNNN jew \UNNNNNNNN). Pereżempju:

    static const int π = 3;
    int get_naïve_pi () {
    ritorn π;
    }

  • Għal-lingwa C, ġiet implimentata porzjon ta’ karatteristiċi ġodda żviluppati fi ħdan l-istandard C2X (attivata billi jiġu speċifikati -std=c2x u -std=gnu2x): deher appoġġ għas-sintassi “[[]]” għad-definizzjoni ta’ attributi bħal f’ C++ (per eżempju, [[gnu ::const]], [[deprecated]], [[fallthrough]] u [[maybe_unused]]. Appoġġ miżjud għas-sintassi "u8" għad-definizzjoni ta' kostanti b'karattri UTF-8.
    Miżjud macros ġodda għal . Miżjud "%OB" u "%Ob" sostituzzjonijiet għal strftime.

  • Il-mod default għal C huwa "-fno-common", li jippermetti aċċess aktar effiċjenti għal varjabbli globali fuq xi pjattaformi.
  • Għal C++, ġew implimentati madwar 16-il bidla u innovazzjoni, żviluppati fl-istandard C++20. Inkluż il-kelma prinċipali miżjuda "costinit"
    u l-appoġġ għall-estensjonijiet tal-mudelli ġie implimentat "kunċetti". Kunċetti jippermettulek tiddefinixxi sett ta' rekwiżiti ta' parametri tal-mudell li, fil-ħin tal-kumpilazzjoni, jillimitaw is-sett ta' argumenti li jistgħu jiġu aċċettati bħala parametri tal-mudell. Il-kunċetti jistgħu jintużaw biex jiġu evitati inkonsistenzi loġiċi bejn il-proprjetajiet tat-tipi tad-dejta użati fil-mudell u l-proprjetajiet tat-tip tad-dejta tal-parametri tad-dħul.

  • G ++ jipprovdi skoperta ta 'mġieba mhux definita kkawżata mill-bdil ta' oġġetti kostanti permezz constexpr. Konsum imnaqqas tal-memorja mill-kompilatur meta jikkalkula constexpr. Żiedu twissijiet ġodda "-Wmismatched-tags" u "-Wredundant-tags".
  • Ġew proposti għażliet ġodda tal-linja tal-kmand:
    • "-fallocation-dce" biex tneħħi pari mhux meħtieġa ta 'operaturi "ġodda" u "ħassar".
    • "-fprofile-partial-training" biex tiddiżattiva l-ottimizzazzjoni tad-daqs għal kodiċi li m'għandux ġirja ta' taħriġ.
    • "-fprofile-reproducible biex jikkontrolla l-livell tar-riproduċibbiltà tal-profil.
    • "-fprofile-prefix-path" biex tiddefinixxi d-direttorju tal-bini tas-sors bażi użat għall-ġenerazzjoni ta' profil separat (għal "-fprofile-generate=profile_dir" u "-fprofile-use=profile_dir").
  • Fit-test ta 'twissija għall-għażliet imsemmija, huma pprovduti hyperlinks li jippermettulek tmur għad-dokumentazzjoni għal dawn l-għażliet. Is-sostituzzjoni tal-URL hija kkontrollata bl-użu tal-għażla "-fdiagnostics-urls".
  • Miżjud operatur tal-preproċessur "__ha_bniet", li jistgħu jintużaw biex jiċċekkjaw għall-funzjonijiet built-in.
  • Miżjud funzjoni ġdida inkorporata "__builtin_roundeven" b'implimentazzjoni tal-funzjoni ta' arrotondament definita fl-ispeċifikazzjoni ISO/IEC TS 18661, simili għal "tond", iżda parti ta' arrotondament akbar minn 0.5 'il fuq (għal valur akbar), inqas minn 0.5 - 'l isfel (għal żero), u ugwali għal 0.5 - li jibda mill-parità taċ-ċifra ta' qabel l-aħħar.
  • Għall-arkitettura AArch64, l-appoġġ għall-estensjoni SVE2 ġie miżjud u l-appoġġ għal SVE (Scalable Vector Extension) ġie mtejjeb, inkluż appoġġ miżjud għal funzjonijiet u tipi SVE ACLE integrati, u l-użu ta 'vettorizzazzjoni. L-appoġġ għal LSE (Large System Extensions) u TME (Transactional Memory Extension) ġie estiż. Żiedu struzzjonijiet ġodda proposti f'Armv8.5-A u Armv8.6-A, inklużi struzzjonijiet għall-ġenerazzjoni ta' numri bl-addoċċ, arrotondament, irbit tat-tikketta tal-memorja,
    bfloat16 u l-multiplikazzjoni tal-matriċi. Appoġġ miżjud għall-proċessur
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 u
    Marvell ThunderX3.

  • Appoġġ miżjud għall-ABI FDPIC (32-bit pointers tal-funzjoni) għal ARM64. Ipproċessar iddisinjat mill-ġdid u ottimizzat ta 'operazzjonijiet ta' 64-bit integer. Miżjud appoġġ CPU
    Arm Cortex-A77,
    Arm Cortex-A76AE u
    Arm Cortex-M35P. Appoġġ estiż għall-istruzzjonijiet tal-ipproċessar tad-dejta ACLE, inklużi SIMD 32-bit, multiplikazzjoni ta '16-bit, aritmetika tal-lukkett, u ottimizzazzjonijiet oħra tal-algoritmi DSP. Miżjud appoġġ sperimentali għall-istruzzjonijiet ACLE CDE (Custom Datapath Extension).

  • Ġenerazzjoni u vettorizzazzjoni tal-kodiċi mtejba b'mod sinifikanti fil-backend għal GPUs AMD ibbażati fuq il-mikroarkitettura GCN.
  • Appoġġ miżjud għal apparati simili għal XMEGA għall-arkitettura AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209, ATmega4808 4809, ATmegaXNUMX u ATmegaXNUMX.

  • Ġiet miżjuda estensjoni ġdida tal-arkitettura tas-sett tal-istruzzjonijiet Intel ENQCMD (-menqcmd) għall-arkitetturi IA-32/x86-64. Appoġġ miżjud għal Intel Cooperlake (-march=cooperlake, jinkludi l-estensjoni ISA AVX512BF16) u Tigerlake (-march=tigerlake, jinkludi l-estensjonijiet ISA MOVDIRI, MOVDIR64B u AVX512VP2INTERSECT ISA).
  • Implimentazzjoni tal-HSAIL (Lingwa Intermedja tal-Arkitettura tas-Sistema Eteroġenea) għal sistemi informatiċi eteroġenji bbażati fuq l-arkitettura HSA ġiet deprecata u x'aktarx se titneħħa f'rilaxx futur.

Sors: opennet.ru

Żid kumment