Fa'asa'olotoina o le GCC 9 fa'apipi'i seti

Ina ua mavae se tausaga o atinae lomia fa'asa'olotoina o se seti fua o fa'aputuga GCC 9.1, o le faʻasalalauga tele muamua i le lala fou GCC 9.x. E tusa ai ma polokalame fou numera faʻamalolo, faʻamatalaga 9.0 na faʻaaogaina i le faagasologa o le atinaʻeina, ma e leʻi leva ona tuʻuina atu le GCC 9.1, o le GCC 10.0 lala ua uma ona faʻaulu, i luga o le faʻavae o le a faʻavaeina le isi faʻasalalauga taua, GCC 10.1.

GCC 9.1 e iloga mo le faʻamautuina o le lagolago mo le C ++ 17 standard, faʻaauauina le faʻatinoina o gafatia o le lumanaʻi C ++ 20 standard (codenamed C ++ 2a), faʻaofi i le pito i luma mo le gagana D, lagolago vaega mo OpenMP 5.0 , toetoe lava a atoatoa lagolago mo OpenACC 2.5, faateleina scalability o interprocedural optimizations ma optimizations i le tulaga fusifusia, faalauteleina o meafaigaluega diagnostic ma faaopoopo o lapataiga fou, backends mo OpenRISC, C-SKY V2 ma AMD GCN GPU.

tele suiga:

  • Fa'aopoopo le lagolago mo le gagana fa'apolokalame D. O le GCC e aofia ai le pito i luma ma se fa'aputuga GDC (Gnu D Compiler) ma faletusi ta'avale (libphobos), e mafai ai ona e fa'aogaina le GCC masani e fausia ai polokalame i le gagana fa'apolokalame D. Le fa'agasologa o le fa'aagaaga o le lagolago i le gagana D i le GCC ua amata i tua i le 2011, ae toso i luga ona o le manaʻoga e aumai le code i le tausisia o manaʻoga a le GCC ma faʻafitauli i le tuʻuina atu o aia tatau tau le atamai ile Digital Mars, lea o loʻo atiaʻe le gagana polokalame D;
  • Ua fa'aleleia atili le fa'atupu tulafono. Mo se faʻataʻitaʻiga, o le faʻaogaina o taʻiala eseese mo le faʻalauteleina o faʻamatalaga Suiga (laupapa oso, suʻega bit, laʻau filifiliga) faʻatatau i tulaga ua faʻatinoina. Faʻaopoopoina le gafatia e suia ai galuega faʻaogaina e aofia ai se faʻamatalaga Suiga e faʻaaoga ai le faʻaogaina o le "-ftree-switch-conversion" (mo se faʻataʻitaʻiga, se seti o tulaga e pei o le "mataupu 2: faʻafefea = 205; malologa; mataupu 3: faʻafefea = 305; malologa ;” o le a liua i le "100 * faʻafefea + 5";
  • Fa'aleleia le fa'ata'ita'iina o feso'ota'iga. O fa'atulagaga fa'apipi'i i totonu ua fa'avasegaina mo fa'aonaponei C++ codebases ma fa'alauteleina i ta'iala fou max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns ma uninlined. -tama-taimi. Faʻaleleia le saʻo ma le faʻamalosi ole vavaeesega malulu / vevela. Fa'aleleia le fa'ata'atia mo le tele tele iunite faaliliu (mo se faʻataʻitaʻiga, pe a faʻaogaina le faʻataʻitaʻiga i le tulaga o fesoʻotaʻiga i polokalame tetele);
  • O le faʻaogaina o masini e faʻavae i luga o taunuʻuga o le faʻasologa o code (PGO - Profile-guided optimization) ua faʻaleleia, lea e maua ai le code sili ona lelei e faʻavae i luga o se auiliiliga o uiga o le faʻatinoina o tulafono. Aotelega filifiliga "-fprofile-fa'aoga"O lea ua aofia ai faiga fa'alelei "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ma le "-ftree-loop-distribution". Aveese le faʻaofiina o histograms ma faʻatau i faila, lea na faʻaititia ai le tele o faila ma faʻamatalaga (faʻasologa nei o loʻo faʻatupuina i luga o le lele pe a faʻatino suʻesuʻega i le taimi o fesoʻotaʻiga);
  • Fa'asilisiliina ole taimi feso'ota'iga (LTO). Faʻafaigofieina o ituaiga na tuʻuina atu aʻo leʻi faia le taunuʻuga, lea na mafai ai ona faʻaitiitia le tele o faila faila a le LTO, faʻaitiitia le faʻaogaina o le mafaufau i le tulaga faʻapipiʻi, ma faʻaleleia le tutusa o gaioiga. Ole numera o vaeluaga (-param lto-partitions) ua faʻateleina mai le 32 i le 128, lea e faʻaleleia ai le faʻatinoga i luga o faiga faʻatasi ma se numera tele o filo CPU. Ua fa'aopoopoina se parakalafa e pulea ai le aofa'i o faiga fa'asili
    "-param lto-max-streaming-parallelism";

    O le iʻuga, faʻatusatusa i le GCC 8.3, o faʻataʻitaʻiga na faʻalauiloaina i le GCC 9 faatagaina faʻaitiitia le taimi faʻapipiʻi o Firefox 5 ma LibreOffice 66 e tusa ma le 6.2.3%. O le tele o faila faila na faʻaititia i le 7%. O le taimi faʻapipiʻi i luga o le 8-core CPU na faʻaititia i le 11%. O le fa'asologa fa'asologa o le fa'asologa o feso'ota'iga ua 28% vave ma fa'aumatia le 20% itiiti le manatua. O le fa'aaogaina o le mafaufau o masini ta'itasi o le tulaga fa'atusa a le LTO na fa'aitiitia i le 30%;

  • Ole tele ole fa'asologa o polokalame fa'atusa e fa'atinoina mo gagana C, C++ ma Fortran OpenACC 2.5, o loʻo faʻamatalaina meafaigaluega mo le faʻaaogaina o gaioiga i GPU ma faʻapitoa faʻapitoa e pei ole NVIDIA PTX;
  • O se vaega lagolago mo le tulaga masani ua faʻatinoina mo C ma C ++ Tatala le MP 5.0 (Open Multi-Processing), o loʻo faʻamatalaina le API ma metotia o le faʻaogaina o metotia polokalame tutusa mo C, C ++ ma Fortran gagana i luga o le tele-core ma hybrid (CPU + GPU / DSP) faiga faʻatasi ai ma le faʻasoa faʻatasi ma iunite vectorization (SIMD) ;
  • Ua faaopoopo lapataiga fou mo le gagana C: "-Waddress-o-faatumu-tagata-tagata" (taua fa'asinoala le fetaui i se tagata ua tumu o se fausaga po'o se iuni) ma
    «-Wabsolute-taua" (pe a faʻaogaina galuega mo le faʻatulagaina o se tau atoatoa, pe a iai se galuega e sili atu ona talafeagai mo le finauga faʻamaonia, mo se faʻataʻitaʻiga, fabs(3.14) e tatau ona faʻaaoga nai lo abs(3.14). Lapataiga fou ua faaopoopo mo C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" ma le "-Wclass-conversion". O le tele o lapataiga na maua muamua ua faʻalauteleina;

  • Fa'aopoopoina le lagolago fa'ata'ita'i mo se vaega o le gagana C i le lumana'i, fa'ailoga C2x. Ina ia faʻatagaina le lagolago C2x, faʻaaoga filifiliga "-std = c2x" ma le "-std = gnu2x" (ina ia mafai ai ona faʻalauteleina GNU). O le tulaga o loʻo i ai pea i le amataga o le atinaʻe, o le mea lea, o lona gafatia, naʻo le faʻamatalaga _Static_assert ma le tasi finauga e lagolagoina (_Static_assert ma lua finauga e faʻamaonia i le C11);
  • Lagolago mo le C ++ 17 tulaga faʻamaonia ua faʻamaonia mautu. I le pito i luma, o le gafatia o le gagana o le C ++ 17 o loʻo faʻatinoina atoatoa, ma i le libstdc ++, o galuega a le faletusi o loʻo faʻamatalaina i le tulaga masani e latalata ile faʻatinoina atoatoa;
  • Fa'aauau faʻatinoga elemene o le lumanaʻi C++ 2a standard. Mo se faʻataʻitaʻiga, o le mafai ona aofia ai laina i le taimi o le amataga ua faʻaopoopoina, faʻaopoopoga mo faʻamatalaga lambda ua faʻatinoina, lagolago mo sui gaogao o faʻamaumauga faʻamaumauga ma foliga mai / le taumateina ua faʻaopoopoina uiga, ua tuʻuina atu le mafai e valaʻau galuega faʻapitoa i faʻamatalaga tuutuuga. , ma isi.
    Ina ia mafai ona lagolago C++ 2a, fa'aoga le "-std=c++2a" ma le "-std=gnu++2a" filifiliga. Faʻaopoopo faila faila ma faila i le libstdc++ mo C++ 2a, std :: remove_cvref, std :: unwrap_reference, std :: unwrap_decay_ref, std :: is_nothrow_convertible ma std :: type_identity traits, std :: midpoint, std:: , std::bind_front,
    std :: asiasi, std :: is_constant_evaluated ma std :: assume_aligned, faaopoopo le lagolago mo le ituaiga char8_t, faʻatinoina le mafai e siaki le prefix ma suffix o manoa (starts_with, ends_with);

  • Fa'aopoopoina le lagolago mo masini fou ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ tele.LITTLE ma Neoverse N1. Faʻaopoopoina le lagolago mo faʻatonuga na faʻaofiina i le Armv8.3-A mo le galue i numera lavelave, faʻasologa o numera pseudo-random (rng) ma faʻailoga manatua (memtag), faʻapea foʻi ma faʻatonuga mo le polokaina o osofaʻiga e fesoʻotaʻi ma le faʻataunuʻuina o faʻalavelave faʻafuaseʻi ma le faʻaogaina o le iunite faʻapitoa o le lala. . Mo le fausaga o le AArch64, ua faʻaopoopoina se faiga puipuia fetaulaiga o faaputuga ma faupu'ega (“-fstack-clash-protection”). Mo le faʻaogaina o foliga o le Armv8.5-A architecture, o le filifiliga "-march=armv8.5-a" ua faʻaopoopoina

  • E aofia ai le pito i tua mo le fausiaina o code mo AMD GPU e faʻavae ile GCN microarchitecture. O le faʻatinoga o loʻo faʻatapulaʻaina i le taimi nei i le tuʻufaʻatasia o talosaga e tasi le filo (lagolago mo le faʻatinoina o faʻatusatusaga e tele-fila e ala i OpenMP ma OpenACC o le a ofoina atu mulimuli ane) ma lagolago mo GPU Fiti ma Vega 10;
  • Fa'aopoopo pito i tua fou mo fa'agaioiga OpenRISC;
  • Fa'aopoopo pito i tua mo fa'agaioiga C-SKY V2, gaosia e le kamupani Saina o le igoa lava e tasi mo masini faʻatau eseese;
  • O filifiliga uma o laina faʻatonu e faʻaogaina le tau o le byte e lagolagoina le suffixes kb, KiB, MB, MiB, GB ma GiB;
  • Fa'atinoina le "-flive-patching = [inline-only-static|inline-clone]" filifiliga e mafai ai ona e ausia le tuʻufaʻatasia saogalemu mo faiga faʻapipiʻi ola ona o le tele-tulaga pulea i luga o le faʻaogaina o interprocedural (IPA) fa'atonuga;
  • Fa'aopoopoina le filifiliga "--completion" mo le fa'atonuga lelei o le fa'amae'aina o filifiliga pe a fa'aaoga le bash;
  • O mea faigaluega fa'ata'ita'i e tu'uina atu fa'aaliga o fa'amatalaga fa'apogai o tusitusiga e fa'ailoa ai le numera o le laina ma fa'ailoga va'ai fa'amatalaga e feso'ota'i, e pei o ituaiga operand. Ina ia faʻamalo le faʻaalia o numera laina ma igoa, o filifiliga "-fno-diagnostics-show-line-numbers" ma le "-fno-diagnostics-show-labels" ua tuʻuina atu;

    Fa'asa'olotoina o le GCC 9 fa'apipi'i seti

  • Fa'alautele meafaigaluega mo le suʻesuʻeina o mea sese i le C ++ code, faʻaleleia atili le faitau o faʻamatalaga e uiga i mafuaʻaga o mea sese ma faʻamaonia ai faʻafitauli faʻafitauli;

    Fa'asa'olotoina o le GCC 9 fa'apipi'i seti

  • Fa'aopoopo le filifiliga "-fdiagnostics-format=json", lea e mafai ai ona fa'atupuina fa'ama'i fa'ata'ita'iga i le fa'asologa e mafai ona faitau i masini (JSON);
  • Faʻaopoopo i ai filifiliga fou faʻasalalau "-fprofile-filter-files" ma le "-fprofile-exclude-files" e filifili ai faila faila e faʻatautaia;
  • O le AddressSanitizer e tuʻuina atu le faʻatupuina o faʻamaoniga faʻamaonia sili atu mo suiga otometi, lea e faʻaitiitia ai le faʻaogaina o le faʻaogaina o le faila faila o loʻo siakiina;
  • Fa'aleleia atili galuega i "-fopt-info» (fa'amatalaga auiliili e uiga i fa'aopoopoga fa'aopoopo). Fa'aopoopoina fa'ailoga fou "silisili" ma le "misi", fa'aopoopo i le mua'i maua muamua "fa'amatalaga". Fa'aopoopoina fa'amatalaga o fa'amatalaga e uiga i le faia o fa'ai'uga i luga o le fa'asalalauina i totonu ma le fa'aogaina o ta'amilosaga;
  • Faʻaopoopo le "-fsave-optimization-record" filifiliga, pe a faʻamaonia, GCC faʻasaoina le faila SRCFILE.opt-record.json.gz faʻatasi ai ma se faʻamatalaga o filifiliga i le faʻaogaina o nisi faʻatonuga. O le filifiliga fou e ese mai le "-fopt-info" mode e ala i le aofia ai o metadata faaopoopo, e pei o faʻamatalaga e uiga i le talaaga ma filifili laina;
  • Fa'aopoopo filifiliga "-fipa-stack-alignment" ma le "-fipa-reference-addressable" e pulea ai le fa'aogaina o fa'aputuga ma le fa'aogaina o auala fa'afeso'ota'i (tusi-na'o po'o le faitau-sa'o) mo suiga fa'amau i taimi o su'esu'ega va'aiga;
  • O galuega fou ua fausia e faʻafeiloaʻi e pulea ai uiga faʻapipiʻi faʻapea foʻi ma amioga e fesoʻotaʻi ma faʻamatalaga lala ma faʻatonuga faʻatonuga: "__fausia_e_uiga«,«__fausia_faamoemoe_ma_tulaga"Ma"__fausia_speculation_safe_value". Ua faaopoopo se uiga fou mo galuega, fesuiaiga ma ituaiga ata;
  • O le lagolago atoatoa mo le fa'aogaina o mea e le'i fa'atasia ua fa'atinoina mo le gagana Fortran;
  • Lagolago mo Solaris 10 (*-*-solaris2.10) ma le Cell / BE (Cell Broadband Engine SPU) faʻavae ua faʻaumatia ma o le a aveesea i le isi faʻasalalauga tele. Lagolago mo Armv2, Armv3, Armv5 ma Armv5E fausaga ua taofia. Lagolago mo Intel MPX (Memory Protection Extensions) ua taofia.

puna: opennet.ru

Faaopoopo i ai se faamatalaga