Sgaoileadh an t-sreath compiler GCC 9

Às deidh bliadhna de leasachadh foillsichte Cruinneachadh de compilers saor an asgaidh GCC 9.1, a’ chiad fhoillseachadh mòr anns a’ mheur ùr GCC 9.x. Ann an co-rèir ri sgeama ùr àireamhan fuasglaidh, chaidh dreach 9.0 a chleachdadh sa phròiseas leasachaidh, agus goirid mus deach GCC 9.1 a leigeil ma sgaoil, bha meur GCC 10.0 air a dhol a-mach mar-thà, air a’ bhunait a bhiodh an ath fhoillseachadh cudromach, GCC 10.1, air a chruthachadh.

Tha GCC 9.1 ainmeil airson a bhith a’ bunailteachadh taic airson inbhe C ++17, a’ leantainn air adhart a’ cur an gnìomh comasan inbhe C ++20 san àm ri teachd (còd C ++2a), in-ghabhail san aghaidh airson cànan D, taic phàirteach airson OpenMP 5.0 , taic cha mhòr coileanta airson OpenACC 2.5, àrdachadh scalability de optimizations eadar-ghoireasach agus optimizations aig an ìre ceangail, leudachadh air innealan sgrùdaidh agus rabhaidhean ùra a chuir ris, backends airson OpenRISC, C-SKY V2 agus AMD GCN GPU.

prìomh atharrachadh:

  • Taic a bharrachd airson cànan prògramadh D. Tha GCC a’ toirt a-steach aghaidh le inneal-cruinneachaidh GDC (Gnu D Compiler) agus leabharlannan runtime (libphobos), a leigeas leat GCC àbhaisteach a chleachdadh gus prògraman a thogail ann an cànan prògramadh D. Am pròiseas gus taic cànain D a chomasachadh ann an GCC air tòiseachadh air ais ann an 2011, ach air a shlaodadh air adhart mar thoradh air an fheum air a’ chòd a thoirt gu gèilleadh ri riatanasan GCC agus duilgheadasan le gluasad chòraichean seilbh inntleachdail gu Digital Mars, a tha a’ leasachadh cànan prògramadh D;
  • Chaidh leasachaidhean a dhèanamh air gineadair a’ chòd. Mar eisimpleir, chaidh cleachdadh ro-innleachdan eadar-dhealaichte airson leudachadh abairtean Switch (clàr leum, deuchainn bit, craobh co-dhùnaidh) a rèir suidheachaidhean a chuir an gnìomh. Chuir sinn ris a’ chomas cruth-atharrachadh a dhèanamh air gnìomhan sreathach a tha a’ toirt a-steach abairt Switch a’ cleachdadh an optimization “-ftree-switch-conversion” (mar eisimpleir, seata de chumhachan mar “cùis 2: ciamar = 205; briseadh; cùis 3: ciamar = 305; briseadh ;" a thionndadh gu "100 * mar + 5";
  • Optimizations eadar-mhodhail nas fheàrr. Tha roghainnean cleachdadh in-loidhne air an atharrachadh airson bunaitean còd C ++ an latha an-diugh agus air an leudachadh le paramadairean ùra max-inline-insns-small, max-inline-insns-size, inline-function-insns, neo-loidhne-gnìomh-ùine, neo-loidhne-thunk-insns agus gun loidhne - ùine-thunk. Cruinneas nas fheàrr agus ionnsaigheachd sgaradh còd fuar / teth. scalability nas fheàrr airson glè mhòr aonadan eadar-theangachaidh (mar eisimpleir, nuair a bhios tu a’ cleachdadh optimization aig an ìre ceangail ri prògraman mòra);
  • Chaidh an uidheamachd optimization stèidhichte air toraidhean pròifil còd (PGO - Optimization air a stiùireadh le pròifil) a leasachadh, a ghineas còd nas fheàrr stèidhichte air mion-sgrùdadh air feartan coileanadh còd. Roghainn geàrr-chunntas"-fprofile-cleachdaidh" a-nis a 'toirt a-steach na modhan optimization "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" agus "-ftree-loop-distribution". Thoir air falbh toirt a-steach histograman le cunntairean ann am faidhlichean, a lughdaich meud nam faidhlichean le pròifilean (tha histograman a-nis air an gineadh air an itealan nuair a bhios iad a’ coileanadh optimizations aig àm ceangail);
  • Optimizations Ùine Ceangail leasaichte (LTO). Chaidh sìmpleachadh de sheòrsan a thoirt seachad mus deach an toradh a ghineadh, a rinn e comasach meud faidhlichean nì LTO a lughdachadh gu mòr, caitheamh cuimhne a lughdachadh aig ìre ceangail, agus co-shìnteadh obrachaidhean adhartachadh. Chaidh an àireamh de sgaradh (-param lto-partitions) àrdachadh bho 32 gu 128, a leasaicheas coileanadh air siostaman le àireamh mhòr de snàithleanan CPU. Chaidh paramadair a chuir ris gus smachd a chumail air an àireamh de phròiseasan optimizer
    "-param lto-max-streaming-parallelism";

    Mar thoradh air an sin, an taca ri GCC 8.3, tha na h-optimizations a chaidh a thoirt a-steach ann an GCC 9 ceadaichte lughdaich an ùine cruinneachaidh de Firefox 5 agus LibreOffice 66 le timcheall air 6.2.3%. Chaidh meud faidhlichean stuth sìos 7%. Lùghdaich ùine ceangail air CPU 8-core le 11%. Tha an ìre optimization sreath den ìre ceangail a-nis 28% nas luaithe agus ag ithe 20% nas lugha de chuimhne. Lùghdaich caitheamh cuimhne gach pròiseasar den ìre co-shìnte de LTO 30%;

  • Tha a’ mhòr-chuid den t-sònrachadh prògramadh co-shìnte air a chuir an gnìomh airson cànanan C, C ++ agus Fortran OpenACC 2.5, a tha a’ mìneachadh innealan airson gnìomhachd luchdachadh sìos air GPUs agus pròiseasairean sònraichte leithid NVIDIA PTX;
  • Chaidh taic pàirt den inbhe a chuir an gnìomh airson C agus C ++ Fosgail MP 5.0 (Ioma-phròiseasadh Fosgailte), a tha a’ mìneachadh an API agus dòighean air dòighean prògramaidh co-shìnte a chuir an sàs airson cànanan C, C ++ agus Fortran air siostaman ioma-cridhe agus tar-chinealach (CPU + GPU / DSP) le aonadan cuimhne agus vectorization co-roinnte (SIMD). ;
  • Chaidh rabhaidhean ùra a chur ris airson cànan C: "- Waddress-of-packed-ball" (luach comharrachaidh neo-ainmichte do bhall làn de structar no aonadh) agus
    «-Wabsolute-luach" (nuair a gheibh thu cothrom air gnìomhan airson luach iomlan obrachadh a-mach, ma tha gnìomh nas freagarraiche airson na h-argamaid ainmichte, mar eisimpleir, bu chòir fabs(3.14) a chleachdadh an àite abs(3.14). Rabhaidhean ùra air an cur ris airson C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" agus "-Wclass-conversion". Chaidh mòran rabhaidhean a bha ri fhaotainn roimhe a leudachadh;

  • Chaidh taic deuchainneach a chur ris airson pàirt de inbhe cànain C san àm ri teachd, le còd C2x. Gus taic C2x a chomasachadh, cleachd na roghainnean "-std = c2x" agus "-std = gnu2x" (gus leudachaidhean GNU a chomasachadh). Tha an inbhe fhathast aig ìre thràth de leasachadh, mar sin, a thaobh a chomasan, chan eil ach an abairt _Static_assert le aon argamaid a’ faighinn taic (_Static_assert le dà argamaid air a chothromachadh ann an C11);
  • Chaidh taic airson inbhe C ++17 ainmeachadh seasmhach. Air an aghaidh, tha comasan cànain C ++17 air an làn bhuileachadh, agus ann an libstdc ++, tha na gnìomhan leabharlainn a tha air am mìneachadh san inbhe faisg air làn bhuileachadh;
  • Leantainn buileachadh eileamaidean den inbhe C++2a san àm ri teachd. Mar eisimpleir, chaidh an comas raointean a thoirt a-steach aig àm tòiseachaidh a chuir ris, chaidh leudachadh airson abairtean lambda a chuir an gnìomh, chaidh taic a thoirt do bhuill falamh de structaran dàta agus buadhan a tha coltach / neo-choltach, chaidh an comas gnìomhan brìgheil a ghairm ann an abairtean gun chumhachan a thoirt seachad. , etc.
    Gus taic C ++2a a chomasachadh, cleachd na roghainnean "-std=c++2a" agus "-std=gnu++2a". Chaidh faidhlichean cinn bit is dreach a chur ri libstdc ++ airson C ++2a, std :: remove_cvref, std :: unwrap_reference, std :: unwrap_decay_ref, std :: is_nothrow_convertible and std :: type_identity traits, std :: midlerp, gnìomhan std : , std ::bind_front,
    std :: visit, std :: is_constant_valuated and std :: assume_aligned, chuir e taic ris an t-seòrsa char8_t, chuir e an gnìomh an comas sgrùdadh a dhèanamh air ro-leasachan agus iar-leasachan nan teudan (starts_with, ends_with);

  • Taic a bharrachd airson pròiseasairean ARM ùra
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE agus Neoverse N1. Taic a bharrachd airson stiùireadh a chaidh a thoirt a-steach ann an Armv8.3-A airson a bhith ag obair le àireamhan iom-fhillte, gineadh àireamhan meallta (rng) agus tagadh cuimhne (memtag), a bharrachd air stiùireadh airson casg a chuir air ionnsaighean co-cheangailte ri coileanadh tuairmeasach agus obrachadh aonad ro-innse meur . Airson ailtireachd AArch64, chaidh modh dìon a chuir ris eadar-ghearradh de chruaich agus cruachan (“-fstack-clash-protection”). Gus feartan ailtireachd Armv8.5-A a chleachdadh, chaidh an roghainn “-march = armv8.5-a” a chur ris

  • Tha e a’ toirt a-steach cùl-taic airson còd a ghineadh airson AMD GPUs stèidhichte air microarchitecture GCN. Tha am buileachadh an-dràsta cuingealaichte ri bhith a’ cur ri chèile tagraidhean aon-snàthainn (thèid taic airson àireamhachadh ioma-snàthainn a dhèanamh tro OpenMP agus OpenACC a thabhann nas fhaide air adhart) agus taic airson GPU Fiji agus Vega 10;
  • Cùl-fhiosrachadh ùr air a chur ris airson pròiseasairean FosgailRISC;
  • Cùl-fhiosrachadh air a chur ris airson pròiseasairean C-SKY V2, air a dhèanamh leis a 'chompanaidh Sìneach den aon ainm airson diofar innealan luchd-cleachdaidh;
  • Bidh a h-uile roghainn loidhne-àithne a bhios ag obrachadh luachan byte a’ toirt taic do na suffixes kb, KiB, MB, MiB, GB agus GiB;
  • Air a chur an gnìomh tha an roghainn “-flive-patching = [inline-only-static | inline-clone]” a’ toirt cothrom dhut co-chruinneachadh sàbhailte a dhèanamh airson siostaman glacaidh beò air sgàth smachd ioma-ìre air cleachdadh eadar-mhodhan (IPA) optimizations;
  • Chaidh roghainn “--completion” a chuir ris airson smachd mionaideach air crìoch a chuir air roghainn nuair a bhios tu a’ cleachdadh bash;
  • Bidh na h-innealan sgrùdaidh a’ toirt seachad taisbeanaidhean de earrannan teacsa tùsail a’ nochdadh àireamh na loidhne agus a’ comharrachadh fiosrachadh co-cheangailte gu fradharcach, leithid seòrsaichean operand. Gus taisbeanadh àireamhan loidhne agus bileagan a chuir dheth, tha na roghainnean “-fno-diagnostics-show-line-numbers” agus “-fno-diagnostics-show-labels” air an toirt seachad;

    Sgaoileadh an t-sreath compiler GCC 9

  • Leudaichte innealan airson a bhith a’ lorg mhearachdan ann an còd C ++, comas leughaidh nas fheàrr air fiosrachadh mu adhbharan mhearachdan agus comharrachadh paramadairean trioblaideach;

    Sgaoileadh an t-sreath compiler GCC 9

  • Roghainn a bharrachd “-fdiagnostics-format = json”, a leigeas le toradh breithneachaidh a ghineadh ann an cruth a ghabhas leughadh le inneal (JSON);
  • Chaidh roghainnean pròifil ùra a chur ris “-fprofile-filter-files” agus “-fprofile-exclude-files” gus faidhlichean stòr a thaghadh airson an làimhseachadh;
  • Bidh AddressSanitizer a’ toirt seachad ginealach de chòd dearbhaidh nas toinnte airson caochladairean fèin-ghluasadach, a lughdaicheas caitheamh cuimhne an fhaidhle so-ghnìomhaichte a thathar a’ sgrùdadh;
  • Toradh nas fheàrr ann an "-fopt-fiosrachaidh» (fiosrachadh mionaideach mu optimizations a bharrachd). Chaidh ro-leasachain ùra a chur ris “optimized” agus “air chall”, a bharrachd air an ro-leasachan “nota” a bha ri fhaighinn roimhe. Toradh fiosrachaidh a bharrachd mu bhith a’ dèanamh cho-dhùnaidhean a thaobh sgaoileadh in-loidhne agus vectorization de chuairtean;
  • Chuir sinn ris an roghainn “-fsave-optimization-record”, nuair a thèid a shònrachadh, bidh GCC a’ sàbhaladh am faidhle SRCFILE.opt-record.json.gz le tuairisgeul air co-dhùnaidhean mu bhith a’ cleachdadh cuid de optimizations. Tha an roghainn ùr eadar-dhealaichte bhon mhodh “-fopt-info” le bhith a’ toirt a-steach meata-dàta a bharrachd, leithid fiosrachadh mun phròifil agus slabhraidhean in-loidhne;
  • Roghainnean a bharrachd “-fipa-stack-alignment” agus “-fipa-reference-addressable” gus smachd a chumail air co-thaobhadh stac agus cleachdadh mhodhan seòlaidh (sgrìobhadh a-mhàin no leughadh-mionaideach) airson caochladairean statach rè optimizations eadar-mhodhail;
  • Thathas a’ toirt a-steach gnìomhan togte ùra gus smachd a chumail air ceangal feartan a bharrachd air giùlan co-cheangailte ri ro-innse meur agus coileanadh stiùireadh tuairmeasach: “_builtin_has_buaidh«,«__builtin_dùil_le_choltachd"Agus"__builtin_tuairisgeul_sàbhailte_luach". Chaidh feart ùr a chur ris airson gnìomhan, caochladairean agus seòrsachan leth-bhreac;
  • Chaidh làn thaic airson cuir a-steach / toradh asyncronach a chuir an gnìomh airson cànan Fortran;
  • Tha taic airson àrd-ùrlaran Solaris 10 (* -* - solaris2.10) agus Cell / BE (Cell Broadband Engine SPU) air a bhith air a mholadh agus thèid a thoirt air falbh san ath fhoillseachadh mòr. Chaidh stad a chuir air taic airson ailtireachd Armv2, Armv3, Armv5 agus Armv5E. Chaidh stad a chuir air taic airson Intel MPX (Leudachain Dìon Cuimhne).

Source: fosgailtenet.ru

Cuir beachd ann