Izdaja zbirke prevajalnikov GCC 9

Po letu razvoja objavljeno izdaja brezplačnega kompleta prevajalnikov GCC 9.1, prva večja izdaja v novi veji GCC 9.x. V skladu z nova shema številke izdaje je bila v razvojnem procesu uporabljena različica 9.0, malo pred izidom GCC 9.1 pa se je že odcepila veja GCC 10.0, na podlagi katere bo nastala naslednja pomembna izdaja GCC 10.1.

GCC 9.1 je znan po stabilizaciji podpore za standard C++17, nadaljnjem izvajanju zmogljivosti prihodnjega standarda C++20 (s kodnim imenom C++2a), vključitvi v sprednji del za jezik D, delni podpori za OpenMP 5.0 , skoraj popolna podpora za OpenACC 2.5, povečanje razširljivosti medproceduralnih optimizacij in optimizacij v fazi vezave, razširitev diagnostičnih orodij in dodajanje novih opozoril, zaledja za OpenRISC, C-SKY V2 in AMD GCN GPU.

Glavni Spremembe:

  • Dodana podpora za programski jezik D. GCC vključuje vmesnik s prevajalnikom GDC (Gnu D Compiler) in izvajalne knjižnice (libphobos), ki vam omogočajo uporabo standardnega GCC za izdelavo programov v programskem jeziku D. Postopek omogočanja podpore za jezik D v GCC se je začel že leta 2011, vendar vlekel naprej zaradi potrebe po uskladitvi kode z zahtevami GCC in težav s prenosom pravic intelektualne lastnine na Digital Mars, ki razvija programski jezik D;
  • Generator kode je bil izboljšan. Izvedena je bila na primer uporaba različnih strategij za razširitev izrazov Switch (skočna tabela, bitni test, drevo odločitev) glede na situacije. Dodana možnost preoblikovanja linearnih funkcij, ki vključujejo izraz Switch z optimizacijo »-ftree-switch-conversion« (na primer nabor pogojev, kot je »case 2: how = 205; break; case 3: how = 305; break ;« bo pretvorjen v »100 * kako + 5«;
  • Izboljšane medproceduralne optimizacije. Nastavitve vgrajenega uvajanja so bile prilagojene za sodobne kodne baze C++ in razširjene z novimi parametri max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns in uninlined -čas za premislek. Izboljšana natančnost in agresivnost ločevanja hladne/vroče kode. Izboljšana razširljivost za zelo velike prevodne enote (na primer pri uporabi optimizacije v fazi povezovanja z velikimi programi);
  • Izboljšan je optimizacijski mehanizem na podlagi rezultatov profiliranja kode (PGO – Profile-guided optimization), ki generira bolj optimalno kodo na podlagi analize značilnosti izvajanja kode. Možnost povzetka "-fprofile-use" zdaj vključuje načine optimizacije "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" in "-ftree-loop-distribution". Odstranjeno vključevanje histogramov s števci v datoteke, kar je zmanjšalo velikost datotek s profili (histogrami se sedaj generirajo sproti pri izvajanju optimizacij med povezovanjem);
  • Izboljšana optimizacija časa povezovanja (LTO). Poenostavitev tipov je bila zagotovljena pred generiranjem rezultata, kar je omogočilo znatno zmanjšanje velikosti objektnih datotek LTO, zmanjšanje porabe pomnilnika v fazi vezave in izboljšanje paralelizacije operacij. Število particij (-param lto-partitions) je bilo povečano z 32 na 128, kar izboljša zmogljivost v sistemih z velikim številom niti CPE. Dodan je bil parameter za nadzor števila procesov optimizatorja
    "-param lto-max-streaming-parallelism";

    Kot rezultat, v primerjavi z GCC 8.3, optimizacije, uvedene v GCC 9 dovoljeno zmanjšajte čas prevajanja Firefoxa 5 in LibreOffice 66 za približno 6.2.3 %. Velikost objektnih datotek se je zmanjšala za 7 %. Čas vezave na 8-jedrnem procesorju se je zmanjšal za 11 %. Stopnja zaporedne optimizacije stopnje povezovanja je zdaj 28 % hitrejša in porabi 20 % manj pomnilnika. Poraba pomnilnika vsakega procesorja vzporedne stopnje LTO se je zmanjšala za 30 %;

  • Večina specifikacij vzporednega programiranja je implementirana za jezike C, C++ in Fortran OpenACC 2.5, ki definira orodja za operacije razbremenitve na grafičnih procesorjih in specializiranih procesorjih, kot je NVIDIA PTX;
  • Delna podpora za standard je bila implementirana za C in C++ Odprite MP 5.0 (Open Multi-Processing), ki definira API in metode uporabe metod vzporednega programiranja za jezike C, C++ in Fortran na večjedrnih in hibridnih (CPU+GPU/DSP) sistemih s skupnim pomnilnikom in vektorizacijskimi enotami (SIMD) ;
  • Za jezik C so bila dodana nova opozorila: "-Waddress-of-packed-član" (neporavnana vrednost kazalca na pakiran član strukture ali unije) in
    «-Wabsolutna vrednost" (pri dostopu do funkcij za izračun absolutne vrednosti, če obstaja primernejša funkcija za podani argument, npr. fabs(3.14) namesto abs(3.14). Dodana nova opozorila za C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" in "-Wclass-conversion". Številna predhodno razpoložljiva opozorila so bila razširjena;

  • Dodana eksperimentalna podpora za del prihodnjega standarda jezika C s kodnim imenom C2x. Če želite omogočiti podporo za C2x, uporabite možnosti "-std=c2x" in "-std=gnu2x" (da omogočite razširitve GNU). Standard je še v zgodnji fazi razvoja, zato je od njegovih zmogljivosti podprt le izraz _Static_assert z enim argumentom (_Static_assert z dvema argumentoma je standardiziran v C11);
  • Podpora za standard C++17 je bila razglašena za stabilno. V sprednjem delu so jezikovne zmogljivosti C++17 v celoti implementirane, v libstdc++ pa so funkcije knjižnice, definirane v standardu, blizu popolne implementacije;
  • Nadaljevano izvajanje elementov prihodnjega standarda C++2a. Na primer, dodana je bila možnost vključitve obsegov med inicializacijo, implementirane so bile razširitve za lambda izraze, dodana je bila podpora za prazne člane podatkovnih struktur in verjetne/malo verjetne atribute, zagotovljena je bila možnost klica virtualnih funkcij v pogojnih izrazih itd.
    Če želite omogočiti podporo za C++2a, uporabite možnosti "-std=c++2a" in "-std=gnu++2a". V libstdc++ dodane datoteke glave bitov in različic za C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible in lastnosti std::type_identity, funkcije std::midpoint, std::lerp , std::bind_front,
    std::visit, std::is_constant_evaluated in std::assume_aligned, dodana podpora za tip char8_t, implementirana možnost preverjanja predpone in pripone nizov (starts_with, ends_with);

  • Dodana podpora za nove procesorje ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE in Neoverse N1. Dodana podpora za navodila, uvedena v Armv8.3-A za delo s kompleksnimi števili, generiranje psevdonaključnih števil (rng) in označevanje pomnilnika (memtag), kot tudi navodila za blokiranje napadov, povezanih s špekulativnim izvajanjem in delovanjem enote za napovedovanje veje . Za arhitekturo AArch64 je bil dodan način zaščite presečišča skladov in kopic (»-fstack-clash-protection«). Za uporabo funkcij arhitekture Armv8.5-A je bila dodana možnost »-march=armv8.5-a«.

  • Vključuje zaledje za generiranje kode za grafične procesorje AMD, ki temeljijo na mikroarhitekturi GCN. Implementacija je trenutno omejena na kompilacijo enonitnih aplikacij (podpora za izvajanje večnitnih izračunov prek OpenMP in OpenACC bo na voljo pozneje) in podporo za GPU Fiji in Vega 10;
  • Dodano novo zaledje za procesorje OpenRISC;
  • Dodano zaledje za procesorje C-SKY V2, ki ga proizvaja kitajsko podjetje z istim imenom za različne potrošniške naprave;
  • Vse možnosti ukazne vrstice, ki upravljajo vrednosti bajtov, podpirajo pripone kb, KiB, MB, MiB, GB in GiB;
  • Izvedeno možnost »-flive-patching=[inline-only-static|inline-clone]« vam omogoča, da dosežete varno prevajanje za sisteme s popravki v živo zaradi večnivojskega nadzora nad uporabo interproceduralnih (IPA) optimizacije;
  • Dodana možnost »--completion« za natančen nadzor dokončanja možnosti pri uporabi bash;
  • Diagnostična orodja zagotavljajo prikaze izvlečkov izvornega besedila, ki označujejo številko vrstice in vizualno označujejo povezane informacije, kot so vrste operandov. Če želite onemogočiti prikaz številk in oznak vrstic, sta na voljo možnosti “-fno-diagnostics-show-line-numbers” in “-fno-diagnostics-show-labels”;

    Izdaja zbirke prevajalnikov GCC 9

  • Razširjeno orodja za diagnosticiranje napak v kodi C++, izboljšana berljivost informacij o vzrokih napak in osvetlitev problematičnih parametrov;

    Izdaja zbirke prevajalnikov GCC 9

  • Dodana možnost “-fdiagnostics-format=json”, ki omogoča generiranje diagnostičnega izhoda v strojno berljivi obliki (JSON);
  • Dodane nove možnosti profiliranja »-fprofile-filter-files« in »-fprofile-exclude-files« za izbiro izvornih datotek za obdelavo;
  • AddressSanitizer zagotavlja generiranje bolj kompaktne kode za preverjanje samodejnih spremenljivk, kar zmanjša porabo pomnilnika izvršljive datoteke, ki se preverja;
  • Izboljšan rezultat v "-fopt-info» (podrobne informacije o dodanih optimizacijah). Dodani novi predponi "optimizirano" in "zgrešeno", poleg prej razpoložljive predpone "opomba". Dodan izpis informacij o odločanju o inline-razvijanju in vektorizaciji ciklov;
  • Dodana možnost “-fsave-optimization-record”, ko je podana, GCC shrani datoteko SRCFILE.opt-record.json.gz z opisom odločitev o uporabi določenih optimizacij. Nova možnost se od načina »-fopt-info« razlikuje po vključitvi dodatnih metapodatkov, kot so informacije o profilu in vgrajenih verigah;
  • Dodani možnosti »-fipa-stack-alignment« in »-fipa-reference-addressable« za nadzor poravnave sklada in uporabe načinov naslavljanja (samo pisanje ali natančno branje) za statične spremenljivke med medproceduralnimi optimizacijami;
  • Predstavljene so nove vgrajene funkcije za nadzor vezave atributov ter vedenja, povezanega z napovedjo razvejanja in špekulativnim izvajanjem navodil: "__builtin_has_atribut«,«__vgrajeno_pričakovati_z_verjetnostjo"in"__builtin_speculation_safe_value". Za funkcije, spremenljivke in vrste je bil dodan nov atribut copy;
  • Za jezik Fortran je bila implementirana popolna podpora za asinhroni vhod/izhod;
  • Podpora za platformi Solaris 10 (*-*-solaris2.10) in Cell/BE (Cell Broadband Engine SPU) je bila opuščena in bo odstranjena v naslednji večji izdaji. Podpora za arhitekture Armv2, Armv3, Armv5 in Armv5E je bila ukinjena. Podpora za Intel MPX (Memory Protection Extensions) je bila ukinjena.

Vir: opennet.ru

Dodaj komentar