GCC 10 konpiladore-multzoaren kaleratzea

Urtebeteko garapenaren ostean argitaratuko doako konpilatzaile multzo bat askatzea GCC 10.1, GCC 10.x adar berriko lehen bertsio nagusia. -ren arabera eskema berria bertsio-zenbakiak, garapen-prozesuan 10.0 bertsioa erabili zen, eta GCC 10.1 kaleratu baino pixka bat lehenago, GCC 11.0 adarra jada adarkatua zen, eta horren oinarrian hurrengo bertsio esanguratsua, GCC 11.1, eratuko zen.

GCC 10.1 aipagarria da C++ 20 estandarrerako C++ lengoaian berrikuntza asko ezartzeagatik, etorkizuneko C hizkuntza estandarrari (C2x) lotutako hobekuntzengatik, konpilatzaileen backendetan optimizazio berriak eta euskarri esperimentalagatik. analisi estatikoko modua. Horrez gain, adar berri bat prestatzerakoan, proiektuak biltegia SVNtik Git-era transferitu zuen.

Nagusia aldaketak:

  • Gehituta analisi estatikoko modu esperimentala"-fanalizatzailea", programa batean kodearen exekuzio bideen eta datu-fluxuen baliabideen intentsiboa den prozedura arteko azterketa egiten duena. Modu honek konpilazio fasean arazoak detektatzeko gai da, hala nola, free() funtzioari dei bikoitzak memoria eremu baterako, fitxategi deskribatzaileen ihesak, erakusle nuluak deserreferentziatu eta pasatzea, askatutako memoria blokeetara atzitzea, hasieratu gabeko balioak erabiltzea, etab. OpenSSL kodearen modu berria erabiltzeak jada identifikatzea ahalbidetu du ahultasun arriskutsua.
  • Prozedura arteko optimizazio hobetuak. IPA-SRA (Interprocedural Scalar Shared Replacement) pasabidea lotzeko garaian funtzionatzeko birdiseinatu da eta, besteak beste, erabili gabeko balio kalkulatuak eta itzuliak kentzen ditu orain. "-O2" optimizazio moduan, "-finline-functions" aukera gaituta dago, exekuzio-errendimenduaren kode trinkoagoaren alde egiteko berriro sintonizatzen dena. Lineako funtzioak hedatzeko heuristikaren lana bizkortu egin da. Lineako hedapen eta funtzioen klonazio heuristikoek balio-tarteei buruzko informazioa erabil dezakete orain banakako eraldaketaren eraginkortasuna aurreikusteko. C++-rako, motan oinarritutako alias-analisiaren zehaztasuna hobetu da.
  • Lotura-denboraren optimizazio hobetuak (LTO). Exekutagarri berria gehitu da lto-zabortegia LTO bytecode duten objektu-fitxategiei buruzko informazioa berrezartzeko. LTO paraleloek automatikoki zehazten dute aldi berean exekutatzen diren egiteko zereginen kopurua eta, ezin badira zehaztu, CPU nukleoen kopuruari buruzko informazioa erabiltzen dute paralelizazio faktore gisa. LTO bytecode konprimitzeko gaitasuna gehitu da zstd algoritmoa erabiliz.
  • Kode-profilaren emaitzetan oinarritutako optimizazio-mekanismoa (PGO - Profile-guided optimization) hobetu da, kode optimoagoa sortzen duena, kodearen exekuzioaren ezaugarrien azterketan oinarrituta. Profilen mantentze-lanak hobetu dira konpilazioan eta kode beroa/hotza bereiztean. " aukeraren bidez-fprofile-valuesΒ» Orain 4 profil-balio kontrola ditzake, adibidez zeharkako deiak egiteko eta profilaren informazio zehatzagoa emanez.
  • C, C++ eta Fortran lengoaietarako inplementatutako programazio paraleloaren zehaztapena OpenACC 2.6, GPUetan eta NVIDIA PTX bezalako prozesadore espezializatuetan eragiketak deskargatzeko tresnak definitzen dituena. Arauaren ezarpena ia amaituta dago Ireki MP 5.0 (Open Multi-Processing), memoria partekatua eta bektorizazio unitateak (SIMD) dituzten nukleo anitzeko eta hibridoetan (CPU+GPU/DSP) sistema paraleloen programazio-metodoak aplikatzeko APIa eta metodoak definitzen dituena. Eginbide gehitu dira, hala nola, azken baldintza pribatuak, eskaneatu eta begizta zuzentarauak, ordena eta use_device_addr adierazpenak. OpenMP eta OpenACC-rentzat, laugarren belaunaldiko (Fiji) eta bosgarren belaunaldiko AMD Radeon (GCN) GPU (VEGA 10/VEGA 20) deskargatzeko eragiketak egiteko laguntza gehitu da.
  • C familiako lengoaietarako, "sarbidea" funtzioa gehitu da erreferentzia edo erakusle bidez emandako objektuetarako funtzioak duen sarbidea deskribatzeko, eta objektu horiek objektuen tamainari buruzko informazioa duten argumentu osoekin lotzeko. "Sarbidearekin" batera lan egiteko, "mota" atributua inplementatzen da erabiltzailearen funtzioetatik sarbide okerra detektatzeko, adibidez, matrizearen mugetatik kanpoko eremu batean balioak idaztean. Gainera, "symver" atributua gehitu da ELF fitxategi bateko ikurrak bertsio-zenbaki zehatzekin lotzeko.
  • Abisu berriak gehitu dira:
    • "-Wstring-compare" ("-Wextra-rekin gaituta") - zeroa strcmp eta strncmp funtzioei deitzearen emaitzarekin alderatzen duten esamoldeen presentziaz ohartarazten du, luzera dela eta konstante baten baliokidea dena. argumentu baten bigarren argumentuko matrizearen tamaina baino handiagoa da.
    • "-Wzero-length-bounds" ("-Warray-bounds-rekin gaituta") - luzera zeroko array-elementuak atzitzeaz ohartarazten du, eta horrek beste datu batzuk gainidaztea eragin dezake.
    • "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" eta "-Wstringop-overflow" abisuak zabaldu dira mugaz kanpoko egoeren kopurua zabaltzeko. maneiatzen diren.
  • Identifikatzaileetan karaktere zabalak zuzenean zehazteko gaitasuna inplementatu du uneko kodeketa erabiliz (UTF-8 lehenespenez) UCN idazkera (\uNNNN edo \UNNNNNNNN) baino. Adibidez:

    static const int Ο€ = 3;
    int get_naΓ―ve_pi() {
    itzuli Ο€;
    }

  • C hizkuntzarako, C2X estandarraren barruan garatutako ezaugarri berrien zati bat inplementatu da (-std=c2x eta -std=gnu2x zehaztuta): "[[]]" sintaxiaren euskarria agertu da atributuak definitzeko moduan. C++ (adibidez, [[gnu ::const]], [[deprecated]], [[fallthrough]] eta [[maybe_unused]]. "u8" sintaxirako euskarria gehitu da UTF-8 karaktereekin konstanteak definitzeko.
    Makro berriak gehitu dira . "%OB" eta "%Ob" ordezkapenak gehitu dira strftime-ra.

  • C-ren modu lehenetsia "-fno-common" da, eta horrek aldagai globaletarako sarbide eraginkorragoa ahalbidetzen du plataforma batzuetan.
  • C++-rako, 16 aldaketa eta berrikuntza inguru inplementatu dira, C++20 estandarrean garatuak. "Constinit" gako-hitza gehituta
    eta txantiloien luzapenetarako laguntza ezarri da "kontzeptuak". Kontzeptuek txantiloi-parametro-eskakizunen multzo bat definitzeko aukera ematen dute, konpilazio garaian txantiloi-parametro gisa onar daitezkeen argumentuen multzoa mugatzen dutenak. Kontzeptuak txantiloiaren barruan erabiltzen diren datu-moten propietateen eta sarrera-parametroen datu-moten propietateen arteko inkoherentzia logikoak saihesteko erabil daitezke.

  • G++-k objektu konstanteak aldatzeak constexpr bidez eragindako jokabide zehaztugabea detektatzen du. Konpiladoreak memoria-kontsumoa murriztu du konstexpr kalkulatzean. "-Wmismatched-tags" eta "-Wredundant-tags" abisu berriak gehitu dira.
  • Komando-lerroko aukera berriak proposatu dira:
    • "-fallocation-dce" behar ez diren "berri" eta "delete" operadoreen bikoteak kentzeko.
    • "-fprofile-partial-training" entrenamendu-exekuziorik ez duen kodearen tamaina optimizatzea desgaitzeko.
    • "-fprofile-reproducible profilaren erreproduzigarritasun maila kontrolatzeko.
    • "-fprofile-prefix-path" profil bereizia sortzeko erabiltzen den oinarrizko iturburu-sorkuntza direktorioa definitzeko ("-fprofile-generate=profile_dir" eta "-fprofile-use=profile_dir").
  • Aipatu aukeren abisu-testuan, aukera hauen dokumentaziora joateko aukera ematen duten hiperestekak eskaintzen dira. URL ordezkapena "-fdiagnostics-urls" aukeraren bidez kontrolatzen da.
  • Aurreprozesadorearen operadorea gehitu da "__eraiki_du", integratutako funtzioak egiaztatzeko erabil daitekeena.
  • "__builtin_roundeven" funtzio berri bat gehitu da ISO/IEC TS 18661 zehaztapenean definitutako biribilketa-funtzioaren ezarpenarekin, "borobilaren" antzekoa, baina 0.5 baino gehiago biribiltzeko zatia (balio handiago batera), 0.5 baino gutxiago. - behera (zeroraino), eta 0.5 berdina - azkenaurreko zifraren parekotasunetik hasita.
  • AArch64 arkitekturari dagokionez, SVE2 luzapenerako euskarria gehitu da eta SVE (Scalable Vector Extension) euskarria hobetu da, SVE ACLE funtzio eta motetarako integratutako euskarria eta bektorializazioaren erabilera barne. LSE (Large System Extensions) eta TME (Transactional Memory Extension) euskarria zabaldu da. Armv8.5-A eta Armv8.6-A-n proposatutako jarraibide berriak gehitu dira, ausazko zenbakiak sortzeko, biribiltzeko, memoria-etiketa lotzeko argibideak barne.
    bfloat16 eta matrizearen biderketa. Prozesadorearen euskarria gehitu da
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 eta
    Marvell ThunderX3.

  • ABI FDPIC (32 biteko funtzio erakusleak) euskarria gehitu da ARM64rako. 64 biteko eragiketa osoen prozesamendua birdiseinatua eta optimizatua. CPU euskarria gehitu da
    Arm Cortex-A77,
    Arm Cortex-A76AE eta
    Arm Cortex-M35P. ACLE datuak prozesatzeko jarraibideetarako euskarria zabaldu da, 32 biteko SIMD, 16 biteko biderketa, latch aritmetika eta DSP algoritmoen beste optimizazio batzuk barne. ACLE CDE (Custom Datapath Extension) argibideetarako laguntza esperimentala gehitu da.

  • GCN mikroarkitekturan oinarritutako AMD GPUen atzeko aldean kodea sortzea eta bektoretzea nabarmen hobetu da.
  • XMEGA antzeko gailuentzako euskarria gehitu da AVR arkitekturarako
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209, ATmega4808 4809, ATmegaXNUMX eta ATmegaXNUMX.

  • Intel ENQCMD instrukzio-multzoaren arkitektura-luzapen berria (-menqcmd) gehitu da IA-32/x86-64 arkitekturarentzat. Intel Cooperlake (-march=cooperlake, AVX512BF16 ISA luzapena barne) eta Tigerlake (-march=tigerlake, MOVDIRI, MOVDIR64B eta AVX512VP2INTERSECT ISA luzapenak barne) PUZetarako laguntza gehitu da.
  • HSA arkitekturan oinarritutako sistema informatiko heterogeneoetarako HSAIL (Heterogeneous System Architecture Intermediate Language) inplementazioa zaharkituta geratu da eta etorkizuneko bertsio batean kenduko da ziurrenik.

Iturria: opennet.ru

Gehitu iruzkin berria