Sgaoileadh an t-sreath compiler GCC 10

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

Tha GCC 10.1 ainmeil airson a bhith a’ buileachadh mòran innleachdan anns a’ chànan C ++ a chaidh a leasachadh airson inbhe C++20, leasachaidhean co-cheangailte ri inbhe cànain C san àm ri teachd (C2x), optimizations ùra ann an backends an cruinneachaidh agus taic deuchainneach. modh anailis statach. A bharrachd air an sin, nuair a chaidh meur ùr ullachadh, ghluais am pròiseact an stòr bho SVN gu Git.

prìomh atharrachadh:

  • Air a chur ris modh deuchainneach airson mion-sgrùdadh statach"- fanalyzer“, a bhios a’ dèanamh mion-sgrùdadh eadar-mhodhail dian air goireasan air slighean cur an gnìomh còd agus sruthan dàta ann am prògram. Tha am modh comasach air duilgheadasan a lorg aig an ìre cruinneachaidh, leithid fiosan dùbailte chun ghnìomh an-asgaidh () airson aon raon cuimhne, tuairisgeul faidhle ag aoidion, cuir às do chomharran agus a’ dol seachad air comharran null, faighinn gu blocaichean cuimhne saor, a’ cleachdadh luachan neo-aithnichte, msaa. Tha cleachdadh a’ mhodh ùr airson còd OpenSSL air a dhèanamh comasach aithneachadh mar-thà so-leòntachd cunnartach.
  • Optimizations eadar-mhodhail nas fheàrr. Chaidh am pas IPA-SRA (Ionad Co-roinnte Scalar Interprocedural) ath-dhealbhadh gus obrachadh aig àm ceangail agus, am measg rudan eile, tha e a-nis a’ toirt air falbh luachan àireamhaichte agus air an tilleadh gun chleachdadh. Anns a’ mhodh optimization “-O2”, tha an roghainn “-finline-functions” air a chomasachadh, a tha air a thionndadh air ais gus fàbhar a thoirt do chòd nas toinnte a thaobh coileanadh coileanadh. Tha obair an heuristic airson cleachdadh in-loidhne air a luathachadh. Faodaidh leudachadh in-loidhne agus heuristics clonadh gnìomh a-nis fiosrachadh mu raointean luach a chleachdadh gus èifeachdas cruth-atharrachaidhean fa leth a ro-innse. Airson C ++, chaidh cruinneas parsaidh alias stèidhichte air seòrsa a leasachadh.
  • Optimizations Ùine Ceangail leasaichte (LTO). Gnìomh ùr air a chur ris lto-dhump gus fiosrachadh mu fhaidhlichean nì ath-shuidheachadh le bytecode LTO. Bidh pasan co-shìnte LTO a’ dearbhadh gu fèin-ghluasadach an àireamh de ghnìomhan dèanaimh a bhios a’ ruith aig an aon àm agus, mura h-urrainnear an dearbhadh, cleachd fiosrachadh mun àireamh de choraichean CPU mar fhactar co-shìnte. Chuir sinn ris a’ chomas air còd byte LTO a dhlùthadh a’ cleachdadh an algairim zstd.
  • 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. Cumail suas ìomhaigh nas fheàrr aig àm cur ri chèile agus dealachadh còd teth / fuar. Leis an roghainn "-fprofile-luachan» a-nis comasach sùil a chumail air suas ri 4 luachan pròifil, mar eisimpleir airson fiosan neo-dhìreach agus a’ toirt seachad fiosrachadh pròifil nas mionaidiche.
  • Sònrachadh prògramadh co-shìnte air a chuir an gnìomh airson cànanan C, C ++ agus Fortran OpenACC 2.6, a tha a’ mìneachadh innealan airson gnìomhachd luchdachadh sìos air GPUs agus pròiseasairean sònraichte leithid NVIDIA PTX. Tha buileachadh na h-inbhe cha mhòr deiseil Fosgail MP 5.0 (Ioma-phròiseasadh Fosgailte), a tha a’ mìneachadh an API agus dòighean air dòighean prògramadh co-shìnte a chuir an sàs air siostaman ioma-cridhe agus tar-chinealach (CPU + GPU / DSP) le aonadan cuimhne agus vectorization co-roinnte (SIMD). Feartan a bharrachd leithid cumhachan mu dheireadh prìobhaideach, stiùiridhean scan is lùb, òrdugh agus abairtean use_device_addr. Airson OpenMP agus OpenACC, chaidh taic a chuir ris airson gnìomhachd luchdachadh sìos air GPUs ceathramh ginealach (Fiji) agus còigeamh ginealach AMD Radeon (GCN) (VEGA 10 / VEGA 20).
  • Airson cànanan an teaghlaich C, chaidh a’ ghnìomh “ruigsinneachd” a chur ris gus cunntas a thoirt air ruigsinneachd a’ ghnìomh air nithean a chaidh seachad le iomradh no puing, agus gus na nithean sin a cheangal ri argamaidean iomlan anns a bheil fiosrachadh mu mheud nan nithean. Gus obrachadh còmhla ri “ruigsinneachd”, tha am feart “seòrsa” air a chuir an gnìomh gus ruigsinneachd ceàrr a lorg bho ghnìomhan neach-cleachdaidh, mar eisimpleir, nuair a bhios tu a ’sgrìobhadh luachan gu raon taobh a-muigh crìochan an t-sreath. Cuideachd air a chur ris tha am feart “symver” ri samhlaidhean co-cheangailte ann am faidhle ELF le àireamhan dreach sònraichte.
  • Rabhaidhean ùra air an cur ris:
    • “-Wstring-compare” (air a chomasachadh le “-Wextra”) - a’ toirt rabhadh mu làthaireachd abairtean anns a bheil neoni air a choimeas ri toradh gairm nan gnìomhan strcmp agus strncmp, a tha co-ionann ri seasmhach air sgàth gu bheil an fhaid de aon argamaid nas motha na meud an t-sreath san dàrna argamaid.
    • "-Wzero-length-bounds" (air a chomasachadh le "-Warray-bounds") - a 'toirt rabhadh mu bhith a' faighinn cothrom air eileamaidean sreath de dh'fhaid neoni, a dh'fhaodadh leantainn gu ath-sgrìobhadh dàta eile.
    • Chaidh na rabhaidhean “-Warray-bounds”, “-Wformat-overflow”, “-Wrestrict”, “-Wreturn-local-addr” agus “-Wstringop-overflow” a leudachadh gus an àireamh de shuidheachaidhean taobh a-muigh chrìochan a leudachadh. a tha air an làimhseachadh.
  • Chuir sinn an gnìomh an comas caractaran farsaing a shònrachadh gu dìreach ann an aithnichearan a’ cleachdadh a’ chòdachaidh gnàthach (UTF-8 gu bunaiteach) seach comharradh UCN (\uNNNN no \UNNNNNNN). Mar eisimpleir:

    const statach int π = 3;
    int get_naïve_pi() {
    tilleadh π;
    }

  • Airson cànan C, chaidh cuibhreann de fheartan ùra a chaidh a leasachadh taobh a-staigh inbhe C2X a chuir an gnìomh (air an comasachadh le bhith a’ sònrachadh -std = c2x agus -std = gnu2x): tha taic don cho-chòrdadh “[[]]” air nochdadh airson buadhan a mhìneachadh mar a tha ann an C++ (mar eisimpleir, [[gnu ::const]], [[deprecated]], [[fallthrough]] agus [[is dòcha_unused]]. Taic a bharrachd airson co-chàradh "u8" airson a bhith a’ mìneachadh seasmhachan le caractaran UTF-8.
    Macros ùra air a chur ris . Chaidh luchd-ionaid "%OB" agus "%Ob" a chur ris an ùine strf.

  • Is e am modh bunaiteach airson C “-fno-common”, a leigeas le ruigsinneachd nas èifeachdaiche air caochladairean cruinne air cuid de àrd-ùrlaran.
  • Airson C ++, chaidh timcheall air 16 atharrachaidhean agus innleachdan a chuir an gnìomh, air an leasachadh ann an inbhe C ++20. A’ toirt a-steach am prìomh fhacal a bharrachd “constinit”
    agus chaidh taic airson leudachadh teamplaid a chuir an gnìomh"a ’bheachd". Tha bun-bheachdan a 'toirt cothrom dhut seata de riatanasan paramadair teamplaid a mhìneachadh a bhios, aig àm cruinneachaidh, a' cuingealachadh an t-seata argamaidean a ghabhas gabhail riutha mar chrìochan teamplaid. Faodar na bun-bheachdan a chleachdadh gus neo-chunbhalachd loidsigeach a sheachnadh eadar feartan nan seòrsaichean dàta a thathar a’ cleachdadh taobh a-staigh an teamplaid agus feartan seòrsa dàta nam paramadairean cuir a-steach.

  • Tha G ++ a’ toirt seachad lorg air giùlan neo-mhìnichte air adhbhrachadh le bhith ag atharrachadh nithean seasmhach tro constexpr. Lùghdachadh air caitheamh cuimhne leis an neach-cruinneachaidh nuair a thathar a’ tomhas constexpr. Chaidh rabhaidhean ùra a chuir ris “-Wmismatched-tags” agus “-Wredundant-tags”.
  • Chaidh roghainnean loidhne-àithne ùra a mholadh:
    • "-fallocation-dce" gus paidhrichean neo-riatanach de ghnìomhaichean "ùr" is "sguab às".
    • "-fprofile-partial-training" gus optimization meud a dhì-cheadachadh airson còd aig nach eil ruith trèanaidh.
    • " -fprofile-reproducible gus smachd a chumail air ìre ath-riochdachadh pròifil.
    • "-fprofile-prefix-path" gus an eòlaire togail bun-stòr a chleachdadh airson gineadh pròifil fa leth a mhìneachadh (airson "-fprofile-generate=profile_dir" agus "-fprofile-use=profile_dir").
  • Anns an teacsa rabhaidh airson na roghainnean a chaidh ainmeachadh, tha hyperlinks air an toirt seachad a leigeas leat a dhol gu na sgrìobhainnean airson na roghainnean sin. Tha smachd air ionadachadh URL a’ cleachdadh an roghainn “-fdiagnostics-urls”.
  • Gnìomhaiche preprocessor air a chur ris"_tha_ air a thogail", a dh'fhaodar a chleachdadh gus sùil a thoirt airson gnìomhan togte.
  • Chuir sinn gnìomh ùr togte “__builtin_roundeven” le buileachadh a’ ghnìomh cruinneachaidh a tha air a mhìneachadh ann an sònrachadh ISO/IEC TS 18661, coltach ri “cruinn”, ach a’ cruinneachadh pàirt nas motha na 0.5 suas (gu luach nas motha), nas lugha na 0.5 - sìos (gu neoni), agus co-ionann ri 0.5 - a 'tòiseachadh bho cho-ionnanachd an fhigear mu dheireadh.
  • Airson ailtireachd AArch64, chaidh taic airson leudachadh SVE2 a chuir ris agus chaidh taic airson SVE (Leudachadh Vector Scalable) a leasachadh, a’ toirt a-steach taic a bharrachd airson gnìomhan agus seòrsachan SVE ACLE a chaidh a thogail a-steach, agus cleachdadh vectorization. Tha taic airson LSE (Leudachadh Siostam Mòr) agus TME (Leudachadh Cuimhne Gnìomhach) air a leudachadh. Chaidh stiùireadh ùr a chur ris a chaidh a mholadh ann an Armv8.5-A agus Armv8.6-A, a’ toirt a-steach stiùireadh airson gineadh àireamhan air thuaiream, cruinneachadh, ceangal tagaichean cuimhne,
    bfloat16 agus iomadachadh matrix. Taic pròiseasar air a chur ris
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 agus
    Marvell ThunderX3.

  • Taic a bharrachd airson ABI FDPIC (comharran gnìomh 32-bit) airson ARM64. Ath-dhealbhadh agus giollachd as fheàrr de ghnìomhachd integer 64-bit. Taic CPU air a chur ris
    Arm Cortex-A77,
    Arm Cortex-A76AE agus
    Arm Cortex-M35P. Taic leudaichte airson stiùireadh giollachd dàta ACLE, a’ toirt a-steach 32-bit SIMD, iomadachadh 16-bit, àireamhachd latch, agus optimizations algorithm DSP eile. Taic deuchainneach air a chur ris airson stiùireadh ACLE CDE (Custom Datapath Extension).

  • Leasachadh gu mòr air gineadh còd agus vectorization anns an deireadh-sheachdain airson AMD GPUs stèidhichte air microarchitecture GCN.
  • Taic a bharrachd airson innealan coltach ri XMEGA airson ailtireachd AVR
    ATtiny 202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608,ATmega1609,ATmega3208,ATmega3209 4808, ATmega4809 agus ATmegaXNUMX.

  • Chaidh leudachadh ailtireachd seata stiùiridh Intel ENQCMD ùr (-menqcmd) a chuir ris airson ailtireachd IA-32 / x86-64. Taic a bharrachd airson Intel Cooperlake (-march = cooperlake, a’ toirt a-steach leudachadh AVX512BF16 ISA) agus Tigerlake (-march = tigerlake, a’ toirt a-steach na leudachaidhean MOVDIRI, MOVDIR64B agus AVX512VP2INTERSECT ISA).
  • Tha buileachadh an HSAIL (Cànan Eadar-mheadhanach Ailtireachd Siostam Heterogeneous) airson siostaman coimpiutaireachd ioma-ghnèitheach stèidhichte air ailtireachd HSA air a bhith gun mholadh agus tha coltas ann gun tèid a thoirt air falbh ann am brath san àm ri teachd.

Source: fosgailtenet.ru

Cuir beachd ann