Ħruġ tas-suite tal-kompilaturi GCC 9

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

GCC 9.1 huwa notevoli għall-istabbilizzazzjoni tal-appoġġ għall-istandard C++17, li jkompli jimplimenta l-kapaċitajiet tal-istandard futur C++20 (isem kodiċi C++2a), inklużjoni fil-frontend għal-lingwa D, appoġġ parzjali għal OpenMP 5.0 , appoġġ kważi komplet għal OpenACC 2.5, iżidu l-iskalabbiltà tal-ottimizzazzjonijiet u l-ottimizzazzjonijiet interproċedurali fl-istadju tal-irbit, espansjoni ta 'għodod dijanjostiċi u żieda ta' twissijiet ġodda, backends għal OpenRISC, C-SKY V2 u AMD GCN GPU.

Il-prinċipali bidliet:

  • Appoġġ miżjud għal-lingwa ta 'programmar D. GCC jinkludi frontend b'kompilatur GDC (Gnu D Compiler) u libreriji ta' runtime (libphobos), li jippermettulek tuża GCC standard biex tibni programmi fil-lingwa ta' programmar D. Il-proċess li jippermetti l-appoġġ tal-lingwa D f'GCC bdiet lura fl-2011, imma mkaxkra minħabba l-ħtieġa li l-kodiċi jinġieb f'konformità mar-rekwiżiti tal-GCC u problemi bit-trasferiment tad-drittijiet tal-proprjetà intellettwali lil Digital Mars, li qed tiżviluppa l-lingwa ta 'programmar D;
  • Sar titjib fil-ġeneratur tal-kodiċi. Pereżempju, ġie implimentat l-użu ta 'strateġiji differenti għall-espansjoni tal-espressjonijiet tal-Iswiċċ (tabella tal-qabża, test tal-bits, siġra tad-deċiżjonijiet) skont is-sitwazzjonijiet. Żieda l-abbiltà li jittrasformaw funzjonijiet lineari li jinkludu espressjoni Switch bl-użu tal-ottimizzazzjoni "-ftree-switch-conversion" (per eżempju, sett ta 'kundizzjonijiet bħal "każ 2: kif = 205; waqfa; każ 3: kif = 305; waqfa; ;” se jiġi kkonvertit għal "100 * kif + 5";
  • Ottimizzazzjonijiet interproċedurali mtejba. Is-settings tal-iskjerament inline ġew adattati għall-kodiċi C++ moderni u estiżi b'parametri ġodda max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns u uninlined -thunk-ħin. Eżattezza u aggressività mtejba tas-separazzjoni tal-kodiċi kiesaħ/sħun. Skalabbiltà mtejba għal kbar ħafna unitajiet tat-traduzzjoni (pereżempju, meta tapplika l-ottimizzazzjoni fl-istadju ta' rabta ma' programmi kbar);
  • 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. Għażla fil-qosor "-fprofil-użu" issa tinkludi l-modi ta 'ottimizzazzjoni "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" u "-ftree-loop-distribution". Neħħa l-inklużjoni ta 'istogrammi b'counters fil-fajls, li naqqas id-daqs tal-fajls bi profili (l-istogrammi issa huma ġġenerati fuq il-fly meta jwettqu ottimizzazzjonijiet waqt il-linking);
  • Ottimizzazzjonijiet Mtejba tal-Ħin tal-Konnessjoni (LTO). Is-simplifikazzjoni tat-tipi ġiet ipprovduta qabel ma ġie ġġenerat ir-riżultat, li għamilha possibbli li jitnaqqas b'mod sinifikanti d-daqs tal-fajls tal-oġġetti LTO, jitnaqqas il-konsum tal-memorja fl-istadju tal-irbit, u tittejjeb il-parallelizzazzjoni tal-operazzjonijiet. In-numru ta 'diviżorji (-param lto-diviżorji) żdied minn 32 għal 128, li jtejjeb il-prestazzjoni fuq sistemi b'numru kbir ta' ħjut tas-CPU. Ġie miżjud parametru biex jikkontrolla n-numru ta 'proċessi ta' ottimizzazzjoni
    "-param lto-max-streaming-parallelism";

    Bħala riżultat, meta mqabbel mal-GCC 8.3, l-ottimizzazzjonijiet introdotti fil-GCC 9 permess tnaqqas il-ħin tal-kumpilazzjoni ta' Firefox 5 u LibreOffice 66 b'madwar 6.2.3%. Id-daqs tal-fajls tal-oġġetti naqas b'7%. Il-ħin tal-irbit fuq CPU 8-core naqas bi 11%. L-istadju ta 'ottimizzazzjoni sekwenzjali tal-istadju ta' rabta issa huwa 28% aktar mgħaġġel u jikkonsma 20% inqas memorja. Il-konsum tal-memorja ta 'kull proċessur tal-istadju parallelizzat ta' LTO naqas bi 30%;

  • Ħafna mill-ispeċifikazzjoni tal-ipprogrammar parallel hija implimentata għal-lingwi C, C++ u Fortran OpenACC 2.5, li jiddefinixxi għodod għall-ħatt ta' operazzjonijiet fuq GPUs u proċessuri speċjalizzati bħal NVIDIA PTX;
  • Appoġġ parzjali għall-istandard ġie implimentat għal C u C++ Iftaħ MP 5.0 (Open Multi-Processing), li jiddefinixxi l-API u l-metodi ta’ applikazzjoni ta’ metodi ta’ programmazzjoni parallela għal-lingwi C, C++ u Fortran fuq sistemi multi-core u ibridi (CPU+GPU/DSP) b’unitajiet ta’ memorja u vettorizzazzjoni kondiviżi (SIMD) ;
  • Twissijiet ġodda ġew miżjuda għal-lingwa C: "-Waddress-of-ippakkjat-membru" (valur tal-pointer mhux allinjat għal membru ippakkjat ta 'struttura jew unjoni) u
    «-Wassolute-valur" (meta taċċessa funzjonijiet għall-kalkolu ta 'valur assolut, jekk ikun hemm funzjoni aktar adattata għall-argument speċifikat, pereżempju, fabs(3.14) għandu jintuża minflok abs(3.14). Twissijiet ġodda miżjuda għal C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" u "-Wclass-conversion". Ħafna twissijiet disponibbli qabel ġew estiżi;

  • Miżjud appoġġ sperimentali għal parti mill-istandard futur tal-lingwa C, isem kodiċi C2x. Biex tippermetti l-appoġġ C2x, uża l-għażliet "-std=c2x" u "-std=gnu2x" (biex tippermetti l-estensjonijiet GNU). L-istandard għadu fi stadju bikri ta 'żvilupp, għalhekk, tal-kapaċitajiet tiegħu, hija appoġġjata biss l-espressjoni _Static_assert b'argument wieħed (_Static_assert b'żewġ argumenti hija standardizzata f'C11);
  • L-appoġġ għall-istandard C++17 ġie ddikjarat stabbli. Fil-frontend, il-kapaċitajiet tal-lingwa ta 'C++17 huma implimentati bis-sħiħ, u f'libstdc++, il-funzjonijiet tal-librerija definiti fl-istandard huma qrib l-implimentazzjoni sħiħa;
  • Tkompli implimentazzjoni elementi tal-istandard futur C++2a. Pereżempju, ġiet miżjuda l-abbiltà li jiġu inklużi firxiet waqt l-inizjalizzazzjoni, ġew implimentati estensjonijiet għal espressjonijiet lambda, ġie miżjud appoġġ għal membri vojta ta 'strutturi tad-dejta u attributi probabbli/improbabbli, ġiet ipprovduta l-abbiltà li ssejjaħ funzjonijiet virtwali f'espressjonijiet kondizzjonali , eċċ.
    Biex tippermetti l-appoġġ C++2a, uża l-għażliet "-std=c++2a" u "-std=gnu++2a". Miżjud fajls tal-header tal-bit u tal-verżjoni għal libstdc++ għal C++ 2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible u std::type_identity features, std::midpoint, std::lerp functions , std::bind_front,
    std::visit, std::is_constant_evaluated u std::assume_aligned, żied l-appoġġ għat-tip char8_t, implimenta l-abbiltà li jiċċekkja l-prefiss u s-suffiss tal-kordi (starts_with, ends_with);

  • Appoġġ miżjud għal proċessuri ARM ġodda
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE u Neoverse N1. Appoġġ miżjud għall-istruzzjonijiet introdotti f'Armv8.3-A għal xogħol b'numri kumplessi, ġenerazzjoni psewdo-random ta' numri (rng) u tikkettar tal-memorja (memtag), kif ukoll struzzjonijiet għall-imblukkar ta' attakki relatati mal-eżekuzzjoni spekulattiva u t-tħaddim tal-unità ta' tbassir tal-fergħa . Għall-arkitettura AArch64, ġie miżjud mod ta 'protezzjoni intersezzjonijiet ta 'munzell u borġ (“-fstack-clash-protection”). Biex tuża l-karatteristiċi tal-arkitettura Armv8.5-A, ġiet miżjuda l-għażla “-march=armv8.5-a”

  • Jinkludi backend għall-ġenerazzjoni ta 'kodiċi għall-AMD GPUs ibbażati fuq il-mikroarkitettura GCN. L-implimentazzjoni bħalissa hija limitata għall-kumpilazzjoni ta 'applikazzjonijiet b'ħajt wieħed (appoġġ għat-twettiq ta' kalkoli b'ħafna ħajt permezz ta 'OpenMP u OpenACC se jiġi offrut aktar tard) u appoġġ għal GPU Fiji u Vega 10;
  • Miżjud backend ġdid għall-proċessuri OpenRISC;
  • Backend miżjud għall-proċessuri C-SKY V2, prodott mill-kumpanija Ċiniża tal-istess isem għal diversi apparati tal-konsumatur;
  • L-għażliet kollha tal-linja tal-kmand li joperaw valuri byte jappoġġjaw is-suffissi kb, KiB, MB, MiB, GB u GiB;
  • Implimentati l-għażla “-flive-patching=[inline-only-static|inline-clone]” tippermettilek tikseb kumpilazzjoni sigura għal sistemi ta’ patching ħajjin minħabba kontroll f’diversi livelli fuq l-użu ta’ interproċedurali (IPA) ottimizzazzjonijiet;
  • Miżjud "--completion" għażla għall-kontroll qamħirrum fin-tlestija tal-għażla meta tuża bash;
  • L-għodod dijanjostiċi jipprovdu wirjiet ta 'siltiet tat-test tas-sors li jindikaw in-numru tal-linja u jimmarkaw viżwalment informazzjoni relatata, bħal tipi ta' operandi. Biex tiddiżattiva l-wiri tan-numri u t-tikketti tal-linji, huma pprovduti l-għażliet "-fno-diagnostics-show-line-numbers" u "-fno-diagnostics-show-labels";

    Ħruġ tas-suite tal-kompilaturi GCC 9

  • Estiża għodod għad-dijanjosi tal-iżbalji fil-kodiċi C++, leġibbiltà mtejba tal-informazzjoni dwar il-kawżi tal-iżbalji u l-enfasi tal-parametri problematiċi;

    Ħruġ tas-suite tal-kompilaturi GCC 9

  • Għażla miżjuda "-fdiagnostics-format=json", li tippermetti li tiġġenera output dijanjostiku f'format li jinqara mill-magni (JSON);
  • Miżjud għażliet ġodda ta 'profiling "-fprofile-filter-files" u "-fprofile-exclude-files" biex tagħżel fajls sors li għandhom jiġu pproċessati;
  • AddressSanitizer jipprovdi ġenerazzjoni ta 'kodiċi ta' verifika aktar kompatti għal varjabbli awtomatiċi, li jnaqqas il-konsum tal-memorja tal-fajl eżekutibbli li qed jiġi kkontrollat;
  • Produzzjoni mtejba fi "-fopt-info» (informazzjoni dettaljata dwar ottimizzazzjonijiet miżjuda). Prefissi ġodda miżjuda "ottimizzati" u "mitlufa", flimkien mal-prefiss disponibbli qabel "nota". Miżjud produzzjoni ta' informazzjoni dwar it-teħid ta' deċiżjonijiet dwar l-iżvolġiment inline u l-vettorizzazzjoni taċ-ċikli;
  • Miżjud l-għażla "-fsave-optimization-record", meta speċifikat, GCC jiffranka l-fajl SRCFILE.opt-record.json.gz b'deskrizzjoni ta 'deċiżjonijiet dwar l-użu ta' ċerti ottimizzazzjonijiet. L-għażla l-ġdida tvarja mill-mod "-fopt-info" billi tinkludi metadejta addizzjonali, bħal informazzjoni dwar il-profil u ktajjen inline;
  • Għażliet miżjuda "-fipa-stack-alignment" u "-fipa-reference-addressable" biex jikkontrollaw l-allinjament tal-munzell u l-użu ta 'modi ta' indirizzar (write-only jew read-exact) għal varjabbli statiċi waqt ottimizzazzjonijiet interproċedurali;
  • Jiġu introdotti funzjonijiet ġodda integrati biex jikkontrollaw l-irbit tal-attributi kif ukoll l-imġiba relatata mal-previżjoni tal-fergħat u l-eżekuzzjoni tal-istruzzjoni spekulattiva: "__builtin_has_attribute«,«__builtin_expect_with_probability"U"__builtin_speculation_safe_value". Ġie miżjud attribut ġdid għal funzjonijiet, varjabbli u tipi kopja;
  • Ġie implimentat appoġġ sħiħ għal input/output mhux sinkroniku għal-lingwa Fortran;
  • L-appoġġ għall-pjattaformi Solaris 10 (*-*-solaris2.10) u Cell/BE (Cell Broadband Engine SPU) ġie deprekat u se jitneħħa fir-rilaxx ewlieni li jmiss. L-appoġġ għall-arkitetturi Armv2, Armv3, Armv5 u Armv5E twaqqaf. L-appoġġ għall-Intel MPX (Memory Protection Extensions) twaqqaf.

Sors: opennet.ru

Żid kumment