Mwepụta nke GCC 10 compiler suite

Mgbe otu afọ mmepe gasịrị bipụtara ntọhapụ nke free set nke compilers GCC 10.1, isi mmalite izizi na ngalaba GCC 10.x ọhụrụ. Dabere na atụmatụ ọhụrụ nọmba ntọhapụ, mbipute 10.0 ejiri mee ihe na usoro mmepe, na obere oge tupu ntọhapụ nke GCC 10.1, alaka GCC 11.0 agbapụlarị, na ndabere nke a ga-emepụta ntọhapụ ọzọ dị ịrịba ama, GCC 11.1.

GCC 10.1 bụ ihe a ma ama maka mmejuputa ọtụtụ ihe ọhụrụ na asụsụ C ++ emepụtara maka ọkọlọtọ C ++ 20, nkwalite ndị metụtara ụkpụrụ asụsụ C n'ọdịnihu (C2x), njikarịcha ọhụrụ na nkwado ndabere na nkwado nnwale. ọnọdụ nyocha static. Tụkwasị na nke ahụ, n'oge a na-akwadebe alaka ọhụrụ, ọrụ ahụ bufere ebe nchekwa ahụ site na SVN gaa Git.

Main gbanwee:

  • agbakwunyere usoro nnwale nke static analysis"-fanalyzer", nke na-eme nyocha interprocedural akụ na ụba nke ụzọ mmebe koodu na data na-aga na mmemme. Ụdị ahụ nwere ike ịchọpụta nsogbu na ọkwa nchịkọta, dị ka oku ugboro abụọ na ọrụ efu () maka otu ebe nchekwa, nkwụsị nke faịlụ faịlụ, nkwụsịtụ na ịfefe ihe efu, ịnweta ngọngọ ebe nchekwa nwere onwe ya, iji ụkpụrụ na-enweghị isi, wdg. Ojiji nke ụdị ọhụrụ maka koodu OpenSSL emelarị ka o kwe omume ịchọpụta adịghị ike dị ize ndụ.
  • Mmalite n'etiti usoro. Emegharịrị ngafe IPA-SRA (Interprocedural Scalar Shared Replacement) ka ọ rụọ ọrụ n'oge ejikọtara yana, n'etiti ihe ndị ọzọ, ugbu a na-ewepụ ụkpụrụ agbakọtara wee weghachite ụkpụrụ ejighi ya. N'ime ọnọdụ njikarịcha "-O2", agbanyere nhọrọ "-finline-functions", nke ewegharịrị iji kwado koodu kọmpat karịa arụmọrụ arụ ọrụ. A na-emewanyewanye ọrụ nke heuristic maka ntinye ọrụ inline. Mgbasawanye inline na ọrụ cloning heuristics nwere ike jiri ozi gbasara oke ọnụọgụ buru amụma ịdị irè nke mgbanwe onye ọ bụla. Maka C++, emelitere izi ezi nke utu aha dabere na ụdị.
  • Nkwalite oge njikọ njikọ (LTO). Agbakwunyere ọhụrụ executable kpofuo iji tọgharịa ozi gbasara faịlụ ihe na LTO bytecode. Parallel LTO na-agafe na-akpaghị aka na-ekpebi ọnụọgụ nke na-agba ọsọ n'otu oge na-arụ ọrụ na, ọ bụrụ na enweghị ike ikpebi, jiri ozi gbasara ọnụọgụ CPU dị ka ihe na-emekọrịta ihe. Agbakwunyere ikike ịpịkọta LTO bytecode site na iji zstd algọridim.
  • Usoro njikarịcha nke dabere na nsonaazụ nke koodu profaịlụ (PGO - Profile-guided optimization) ka emelitere, nke na-ewepụta koodu kachasị mma dabere na nyocha nke njirimara nke mkpochapụ koodu. Ndozi profaịlụ emelitere n'oge nchịkọta yana nkewa koodu ọkụ/oyi. Site na nhọrọ "-fprofile-ụkpụrụ»nwere ike nyochaa ugbu a ruo ụkpụrụ profaịlụ 4, dịka ọmụmaatụ maka oku na-apụtaghị ìhè yana ịnye ozi profaịlụ zuru oke.
  • Nkọwapụta mmemme agbakwunyere maka asụsụ C, C++ na Fortran Mepee ACC 2.6, nke na-akọwapụta ngwaọrụ maka mbupụ arụmọrụ na GPU na ndị nrụpụta pụrụ iche dị ka NVIDIA PTX. Mmejuputa ọkọlọtọ a fọrọ nke nta ka ọ zuo oke MepeeMP 5.0 (Open Multi-Processing), nke na-akọwa API na ụzọ nke itinye usoro mmemme yiri ya na sistemụ multi-core na ngwakọ (CPU+GPU/DSP) na ebe nchekwa na-ekekọrịta na nkeji vectorization (SIMD). Atụmatụ agbakwunyere dị ka ọnọdụ ikpeazụ nke onwe, nyocha na ntuziaka loop, ịtụ na ojiji_device_addr okwu. Maka OpenMP na OpenACC, agbakwunyela nkwado maka mbupụ ọrụ na ọgbọ nke anọ (Fiji) na AMD Radeon (GCN) GPU nke ọgbọ ise (VEGA 10/VEGA 20).
  • Maka asụsụ nke ezinụlọ C, agbakwunyere ọrụ "nweta" iji kọwaa ohere ọrụ ahụ na-enweta ihe ndị sitere na ntụnye aka ma ọ bụ ntụnye aka, na ijikọ ihe ndị dị otú ahụ na arụmụka integer nwere ozi gbasara nha ihe ndị ahụ. Iji rụọ ọrụ na njikọ "nweta", a na-emejuputa njirimara "ụdị" iji chọpụta ohere na-ezighi ezi site na ọrụ onye ọrụ, dịka ọmụmaatụ, mgbe ị na-ede ụkpụrụ na mpaghara na-abụghị oke nke nhazi ahụ. Agbakwunyekwara bụ njirimara "symver" maka akara mmekọ na faịlụ ELF nwere nọmba ụdịdị.
  • Ịdọ aka ná ntị ọhụrụ agbakwunyere:
    • "-Wstring-compare" (nyere ya na "-Wextra") - na-adọ aka ná ntị banyere ọnụnọ nke okwu nke efu na-atụnyere n'ihi na-akpọ strcmp na strncmp ọrụ, nke bụ otu ihe na-adịgide adịgide n'ihi na ogologo oge. nke otu arụmụka dị ukwuu karịa nha n'usoro na arụmụka nke abụọ.
    • "-Wzero-length-bounds" (nyere ya na "-Warray-bounds") - na-adọ aka ná ntị banyere ịnweta nhazi ihe nke ogologo efu, nke nwere ike iduga na-edegharị data ndị ọzọ.
    • A gbasaala ịdọ aka ná ntị "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" na "-Wstringop-overflow" iji gbasaa ọnụ ọgụgụ nke ọnọdụ ndị na-apụ apụ. nke a na-edozi.
  • Tinyere ikike ịkọwapụta mkpụrụedemede sara mbara ozugbo na ihe nchọpụta site na iji ntinye koodu dị ugbu a (UTF-8 na ndabara) karịa ọkwa UCN (\uNNNN ma ọ bụ \UNNNNNNNN). Ọmụmaatụ:

    static const int π = 3;
    int get_naïve_pi() {
    nloghachi π;
    }

  • Maka asụsụ C, etinyere akụkụ nke atụmatụ ọhụrụ emepụtara n'ime ọkọlọtọ C2X (gbanyere site na ịkọwapụta -std=c2x na -std=gnu2x): nkwado maka “[[]]” syntax apụtala maka ịkọwapụta njirimara dịka ọ dị na C++ (dịka ọmụmaatụ, [[gnu :: const]], [[deprecated]], [[fallthrough]] na [[ma eleghị anya_ejighi ya]]. Agbakwunyere nkwado maka "u8" syntax maka ịkọwapụta ihe na-agbanwe agbanwe na mkpụrụedemede UTF-8.
    Agbakwunyere macro ọhụrụ na . Agbakwunyere "%OB" na "% Ob" nnọchi na strftime.

  • Ụdị ndabara maka C bụ "-fno-common", nke na-enye ohere maka ịnweta mgbanwe zuru ụwa ọnụ nke ọma na ụfọdụ nyiwe.
  • Maka C++, ihe dị ka mgbanwe 16 na ihe ọhụrụ emejuputala, nke emepụtara na ọkọlọtọ C++20. Gụnyere isiokwu agbakwunyere “constinit”
    na nkwado maka ndebiri ndọtị ka emejuputala "echiche". Echiche na-enye gị ohere ịkọwapụta ihe achọrọ nrụnye nke ndebiri nke, n'oge a na-achịkọta, na-amachi usoro arụmụka enwere ike ịnabata dị ka paramita ndebiri. Enwere ike iji echiche ndị ahụ iji zere ndakọrịta ezi uche dị n'etiti njirimara nke ụdị data ejiri n'ime template na njirimara ụdị data nke ntinye ntinye.

  • G++ na-enye nchọpụta nke omume enweghị nkọwa kpatara site na ịgbanwe ihe mgbe niile site na constexpr. Mbelata oriri ebe nchekwa site n'ịkọkọta mgbe ọ na-agbakọ constexpr. agbakwunyere ịdọ aka ná ntị ọhụrụ "-Wmismatched-tags" na "-Wredundant-tags".
  • Atụpụtala nhọrọ ahịrị iwu ọhụrụ:
    • "-fallocation-dce" iji wepu ụzọ abụọ na-adịghị mkpa nke "ọhụrụ" na "ehichapụ" ndị ọrụ.
    • "-fprofile-partial-training" iji gbanyụọ njikarịcha nha maka koodu na-enweghị usoro ọzụzụ.
    • "-fprofile-reproducible iji chịkwaa ọkwa nke nrụpụta profaịlụ.
    • "-fprofile-prefix-path" iji kọwapụta akwụkwọ ndekọ aha isi mmalite eji maka ọgbọ profaịlụ dị iche (maka "-fprofile-generate=profile_dir" na "-fprofile-use=profile_dir").
  • Na ederede ịdọ aka ná ntị maka nhọrọ ndị a kpọtụrụ aha, a na-enye hyperlinks nke na-enye gị ohere ịga akwụkwọ maka nhọrọ ndị a. A na-achịkwa nnọchi URL site na iji nhọrọ "-fdiagnostics-urls".
  • Onye ọrụ preprocessor agbakwunyere"__nwere_builtin", nke enwere ike iji lelee ọrụ arụnyere n'ime ya.
  • Agbakwunyere ọrụ arụrụ n'ime ọhụrụ "__builtin_roundeven" yana mmejuputa ọrụ okirikiri akọwapụtara na nkọwapụta ISO/IEC TS 18661, nke yiri "gburugburu", mana akụkụ okirikiri karịrị 0.5 elu (ruo nnukwu uru), ihe na-erughị 0.5 - gbadaa (ruo efu), na nhata 0.5 - malite na nha nke ọnụọgụ penultimate.
  • Maka ihe owuwu AArch64, nkwado maka ndọtị SVE2 agbakwunyere na nkwado maka SVE (Scalable Vector Extension) ka emelitere, gụnyere nkwado agbakwunyere maka arụ ọrụ na ụdị SVE ACLE arụnyere, yana iji vectorization. Nkwado maka LSE (Large System Extensions) na TME (Mgbakwunye ebe nchekwa azụmahịa) agbasawanye. agbakwunyere ntuziaka ọhụrụ akwadoro na Armv8.5-A na Armv8.6-A, gụnyere ntuziaka maka ọgbọ nọmba random, okirikiri, njide mkpado ebe nchekwa,
    bfloat16 na matrix multiplication. Nkwado processor agbakwunyere
    Ogwe aka Cortex-A77,
    Ogwe aka Cortex-A76AE,
    Ogwe aka Cortex-A65,
    Ogwe aka Cortex-A65AE,
    Arm Cortex-A34 na
    Marvell ThunderX3.

  • Nkwado agbakwunyere maka ABI FDPIC (ihe ntụnye ọrụ 32-bit) maka ARM64. Nhazigharị na nhazi kachasị nke arụmọrụ integer 64-bit. Nkwado CPU agbakwunyere
    Ogwe aka Cortex-A77,
    Arm Cortex-A76AE na
    Ogwe aka Cortex-M35P. Nkwado agbasawanye maka ntuziaka nhazi data ACLE, gụnyere 32-bit SIMD, 16-bit multiplication, latch rithmetic, na njikarịcha DSP algorithm ndị ọzọ. Nkwado nnwale agbakwunyere maka ntuziaka ACLE CDE (Custom Datapath Extension).

  • Ọgbọ koodu emelitere nke ọma na vectorization na azụ azụ maka AMD GPU dabere na microarchitecture GCN.
  • Nkwado agbakwunyere maka ngwaọrụ dị ka XMEGA maka nhazi ụlọ AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATtiny808, ATmegaAT809gaAT1608megaAT1609 , ATmega3208, ATmega3209 4808, ATmega4809 na ATmegaXNUMX.

  • agbakwunyere ntụzịaka Intel ENQCMD ọhụrụ setịpụrụ ndọtị ụlọ (-menqcmd) maka ụlọ IA-32/x86-64. Nkwado agbakwunyere maka Intel Cooperlake (-march = cooperlake, gụnyere ndọtị AVX512BF16 ISA) na Tigerlake (-march = tigerlake, gụnyere MOVDIRI, MOVDIR64B na AVX512VP2INTERSECT ISA extensions) CPUs.
  • Mmejuputa iwu nke HSAIL (Heterogeneous System Architecture Intermediate Language) maka sistemu mgbakọ dị iche iche dabere na ụkpụrụ ụlọ HSA emebiela ma enwere ike wepu ya na mwepụta n'ọdịnihu.

isi: opennet.ru

Tinye a comment