Te tukunga o te huinga whakahiato GCC 9

I muri i te tau o te whanaketanga whakaputaina te tukunga o te huinga whakahiato kore utu GCC 9.1, te tukunga nui tuatahi i roto i te peka hou GCC 9.x. E ai ki kaupapa hou tau tuku, putanga 9.0 i whakamahia i roto i te tukanga whanaketanga, a i mua tata i te tukunga o GCC 9.1, kua peka ke te peka GCC 10.0, i runga i te kaupapa o te tukunga nui e whai ake nei, GCC 10.1, ka hangaia.

He mea rongonui a GCC 9.1 mo te whakapumau i te tautoko mo te paerewa C++17, kei te haere tonu ki te whakatinana i nga kaha o te paerewa C++20 a meake nei (ko te ingoa C++2a), te whakauru ki mua mo te reo D, te tautoko waahanga mo OpenMP 5.0 , tata oti te tautoko mo OpenACC 2.5, whakapiki ake i te whakahiatotanga o nga arotautanga waenga me nga arotautanga i te wahanga here, te whakaroahia o nga taputapu tātaritanga me te taapiri o nga whakatupato hou, nga tuara mo OpenRISC, C-SKY V2 me AMD GCN GPU.

Main huringa:

  • He tautoko taapiri mo te reo hötaka D. Kei roto i te GCC he pito o mua me te whakahiato GDC (Gnu D Compiler) me nga whare pukapuka wa whakahaere (libphobos), ka taea e koe te whakamahi i te GCC paerewa ki te hanga i nga kaupapa i roto i te reo papatono D. Ko te tukanga o te tautoko reo D i roto i te GCC kua timata hoki i roto i te 2011, engari toia ki runga i runga i te hiahia ki te kawe i te waehere kia rite ki nga whakaritenga a te GCC me nga raruraru ki te whakawhiti i nga mana taonga hinengaro ki Digital Mars, e whakawhanake ana i te reo whakahoahoa D;
  • Kua whakapai ake i te kaihanga waehere. Hei tauira, kua whakatinanahia te whakamahinga o nga rautaki rereke mo te whakawhanui i nga korero Whakawhiti (tepu peke, te whakamatautau moka, te rakau whakatau) i runga i nga ahuatanga kua whakatinanahia. Kua taapirihia te kaha ki te huri i nga mahi raina kei roto he kupu Whakawhiti ma te whakamahi i te arotautanga "-ftree-switch-conversion" (hei tauira, he huinga tikanga penei "take 2: pehea = 205; whati; take 3: pehea = 305; whati ;” ka hurihia ki te "100 * pehea + 5";
  • Kua pai ake nga arotautanga waenga. Kua urutauhia nga tautuhinga whakatakotoranga rora mo nga turanga waehere C++ hou me te whakawhanui me nga tawhā hou max-inline-insns-iti, max-inline-insns-rahi, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns me te kore-raina. -thunk-wa. Kua pai ake te tika me te kaha o te wehenga waehere makariri/wera. Kua pai ake te tauineine mo te tino nui waeine whakamaori (hei tauira, ina tono arotautanga i te wahanga hono ki nga kaupapa nui);
  • Ko te tikanga arotautanga i runga i nga hua o te tohu tohu (PGO - Profile-guided optimization) kua pai ake, e whakaputa ana i te waehere tino pai ake i runga i te tātaritanga o nga ahuatanga o te mahi waehere. Kōwhiringa whakarāpopoto "-fprofile-whakamahi" kei roto inaianei ko nga tikanga arotautanga "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" me "-ftree-loop-distribution". I whakakorehia te whakaurunga o nga tohu tohu me nga porotiti ki roto i nga konae, i whakaitihia te rahi o nga konae me nga tuhinga korero (kei te hangaia nga tohu tohu i te wa e mahi ana i nga arotautanga i te wa e hono ana);
  • Te Whakapai ake i nga Whakaritenga Waa Hononga (LTO). Ko te whakangwaritanga o nga momo i tukuna i mua i te whakaputanga o te hua, na reira ka taea te whakaiti i te rahi o nga konae ahanoa LTO, te whakaiti i te kohi mahara i te waahi here, me te whakapai ake i te whakarara o nga mahi. Kua piki ake te maha o nga wehewehenga (-param lto-partitions) mai i te 32 ki te 128, he pai ake te mahi i runga i nga punaha me te maha o nga miro CPU. Kua taapirihia he tawhā hei whakahaere i te maha o nga tikanga mo te arotau
    "-param lto-max-streaming-parallelism";

    No reira, ka whakatauritea ki te GCC 8.3, ko nga arotautanga i whakauruhia ki te GCC 9 whakaaetia whakaitihia te wa whakahiato o Firefox 5 me LibreOffice 66 ma te 6.2.3%. I heke te rahi o nga konae ahanoa ma te 7%. Ko te wa here i runga i te PTM 8-matua i heke ma te 11%. Ko te wahanga arotautanga raupapa o te atamira hono he 28% tere ake me te pau i te 20% iti ake te mahara. Ko te kai mahara o ia tukatuka o te wahanga whakarara o te LTO i heke ma te 30%;

  • Ko te nuinga o nga whakatakotoranga hotaka whakarara kua whakatinanahia mo nga reo C, C++ me Fortran OpenACC 2.5, e tautuhi ana i nga taputapu mo te whakaheke i nga mahi i runga i nga GPU me nga tukatuka motuhake penei i te NVIDIA PTX;
  • Kua whakatinanahia etahi waahanga tautoko mo te paerewa mo C me C++ WhakatuwheraMP 5.0 (Open Multi-Processing), e tautuhi ana i te API me nga tikanga mo te tono tikanga whakarara mo nga reo C, C ++ me Fortran i runga i nga punaha maha-matua me te ranu (CPU+GPU/DSP) me nga mahara tiritiri me nga waeine vectorization (SIMD) ;
  • Kua taapirihia nga whakatupato hou mo te reo C: "-Waddress-of-packed-member" (te uara tohu tohu ki tetahi mema kapi o te hanganga, uniana ranei) me
    «-Waabsolute-uara" (i te wa e uru ana ki nga mahi mo te tatau i te uara tino, mena he taumahi pai ake mo te tohenga kua tohua, hei tauira, me whakamahi nga fabs(3.14) hei utu mo te abs(3.14). Nga whakatupato hou kua taapiri mo C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" me "-Wclass-conversion". He maha nga whakatupato e waatea ana i mua kua whakawhānuihia;

  • He tautoko whakamatautau mo tetahi waahanga o te paerewa reo C a meake nei, ko C2x te ingoa. Kia taea ai te tautoko C2x, whakamahia nga whiringa "-std=c2x" me te "-std=gnu2x" (kia taea ai nga toronga GNU). Ko te paerewa kei te timatanga tonu o te whakawhanaketanga, no reira, mo ona kaha, ko te kupu _Static_assert me te tohenga kotahi e tautokohia ana (_Static_assert me nga tohenga e rua kua whakatauritehia ki C11);
  • Ko te tautoko mo te paerewa C ++ 17 kua kiia he pumau. I mua, kua tino whakatinanahia nga kaha reo o C++17, a, i roto i te libstdc++, ko nga mahi whare pukapuka kua tautuhia i roto i te paerewa e tata ana ki te whakatinanatanga katoa;
  • Haere tonu whakatinana huānga o te paerewa C++2a a meake nei. Hei tauira, kua taapirihia te kaha ki te whakauru i nga awhe i te wa o te aratakitanga, kua whakatinanahia nga taapiri mo nga whakaaturanga lambda, te tautoko mo nga mema kau o nga hanganga raraunga me nga huanga pea / kore pea kua taapirihia, kua whakaratohia te kaha ki te karanga i nga mahi mariko i roto i nga korero here. , etc.
    Kia taea ai te tautoko C++2a, whakamahia nga whiringa "-std=c++2a" me "-std=gnu++2a". Kua taapirihia nga konae pane pane moka me te putanga ki te libstdc++ mo C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible me std::type_identity traits, std::midpoint, std:: , std::bind_front,
    std :: visit, std :: is_constant_evaluated and std :: assume_aligned, tāpiri tautoko mo te momo char8_t, i whakatinanahia te kaha ki te taki i te prefix me te kumara o nga aho (starts_with, ends_with);

  • He tautoko taapiri mo nga tukatuka ARM hou
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ nui.LITTLE me Neoverse N1. He tautoko taapiri mo nga tohutohu i whakauruhia ki Armv8.3-A mo te mahi me nga tau matatini, te whakaputanga tau pseudo-tupurangi (rng) me te tohu mahara (memtag), tae atu ki nga tohutohu mo te aukati i nga whakaeke e pa ana ki te mahi whakapae me te mahi o te waahanga matapae peka. . Mo te hoahoanga AArch64, kua taapirihia he aratau whakamarumaru nga whakawhitinga o te puranga me te puranga (“-fstack-clash-protection”). Hei whakamahi i nga ahuatanga o te hoahoanga Armv8.5-A, kua taapirihia te whiringa "-march=armv8.5-a"

  • Kei roto he tuara mo te whakaputa waehere mo nga AMD GPU i runga i te GCN microarchitecture. I tenei wa ka whakawhäitihia te whakatinanatanga ki te whakahiatotanga o nga tono miro kotahi (ka tautokohia nga tatauranga miro-maha ma OpenMP me OpenACC i muri mai) me te tautoko mo te GPU Fiji me Vega 10;
  • Kua taapirihia te tuara hou mo nga kaitahuri OpenRISC;
  • Kua taapirihia te tuara mo nga kaitahuri C-SKY V2, i hangaia e te kamupene Hainamana o taua ingoa mo nga momo taputapu kaihoko;
  • Ko nga whiringa raina whakahau katoa e whakahaere ana i nga uara paita e tautoko ana i nga kumara kb, KiB, MB, MiB, GB me GiB;
  • Kua whakatinanahia Ko te kōwhiringa “-flive-patching=[inline-only-static|inline-clone]” ka taea e koe te whakatutuki i te whakahiato haumaru mo nga punaha papaki-ora na te mana taumata-maha mo te whakamahi i nga tikanga whakawhiti (IPA) arotautanga;
  • Kua taapirihia te whiringa "--completion" mo te whakahaere pai mo te whakaotinga whiringa ka whakamahi i te bash;
  • Ko nga taputapu tātari e whakaatu ana i nga waahanga kuputuhi puna e tohu ana i te nama raina me te tohu whakakitenga korero e pa ana, penei i nga momo operand. Hei whakakore i te whakaaturanga o nga nama raina me nga tapanga, ka whakaratohia nga whiringa "-fno-diagnostics-show-line-numbers" me "-fno-diagnostics-show-labels";

    Te tukunga o te huinga whakahiato GCC 9

  • Kua whakawhānuihia nga taputapu mo te tarai i nga hapa i roto i te waehere C ++, te pai ake o te panui o nga korero mo nga take o nga hapa me te whakaatu i nga waahanga raruraru;

    Te tukunga o te huinga whakahiato GCC 9

  • Ko te whiringa taapiri "-fdiagnostics-format=json", ka taea te whakaputa i te putanga tātaritanga i roto i te whakatakotoranga ka taea te panui miihini (JSON);
  • Kua taapirihia nga whiringa korero hou "-fprofile-filter-files" me "-fprofile-exclude-files" hei kowhiri i nga konae puna hei tukatuka;
  • Ko te AddressSanitizer e whakarato ana i te hanga waehere whakaū kiato mo nga taurangi aunoa, e whakaiti ana i te kai mahara o te konae ka taea te tirotirohia;
  • Kua pai ake te putanga i roto i "-fopt-info» (nga korero taipitopito mo nga arotautanga taapiri). Kua taapirihia nga taapiri hou "whakapaipai" me te "ngaro", hei taapiri atu ki te "note" e waatea ana i mua. He putanga taapiri mo nga korero e pa ana ki te whakatau whakatau mo te whakamaarama-a-raina me te whakamaaramatanga o nga huringa;
  • Kua taapirihia te whiringa "-fsave-optimization-record", ka tohua, ka tiakina e GCC te konae SRCFILE.opt-record.json.gz me te whakaahuatanga o nga whakatau mo te whakamahi i etahi arotautanga. He rereke te whiringa hou mai i te aratau "-fopt-info" ma te whakauru i etahi atu metadata, penei i nga korero e pa ana ki te whaarangi me nga mekameka raina;
  • Ko nga whiringa taapiri "-fipa-stack-alignment" me "-fipa-reference-addressable" ki te whakahaere i te tirohanga o te puranga me te whakamahi i nga aratau korero (tuhi-anake, panui-tika ranei) mo nga taurangi pateko i te wa e arotau ana i waenga;
  • Ko nga mahi hou kua whakauruhia ki roto ki te whakahaere i te herenga huanga tae atu ki te whanonga e pa ana ki te matapae peka me te whakatinanatanga o nga tohutohu whakapae: "__he_huatanga_hanga«,«__whakamatau_me_tuponotanga"A"__whakaaro_whakaaro_uara_haumaru". Kua taapirihia he huanga hou mo nga mahi, taurangi me nga momo tārua;
  • Ko te tautoko katoa mo te whakaurunga tukutahi/whakaputa kua whakatinanahia mo te reo Fortran;
  • Ko te tautoko mo te Solaris 10 (*-*-solaris2.10) me te Pūtau / BE (Cell Broadband Engine SPU) kua whakakorehia, ka tangohia i roto i te tukunga nui e whai ake nei. Ko te tautoko mo nga hoahoanga Armv2, Armv3, Armv5 me Armv5E kua whakamutua. Kua whakakorehia te tautoko mo te Intel MPX (Memory Protection Extensions).

Source: opennet.ru

Tāpiri i te kōrero