Pagpagawas sa GCC 9 compiler suite

Human sa usa ka tuig nga kalamboan gipatik pagpagawas sa usa ka libre nga set sa mga compiler GCC 9.1, ang unang mayor nga pagpagawas sa bag-ong GCC 9.x nga sanga. Subay sa bag-ong laraw mga numero sa pagpagawas, ang bersyon 9.0 gigamit sa proseso sa pag-uswag, ug wala madugay sa wala pa ang pagpagawas sa GCC 9.1, ang sanga sa GCC 10.0 nagsanga na, nga gibase sa kung diin ang sunod nga hinungdanon nga pagpagawas, ang GCC 10.1, maporma.

Ang GCC 9.1 nabantog alang sa pagpalig-on sa suporta alang sa C ++ 17 nga sumbanan, nga nagpadayon sa pagpatuman sa mga kapabilidad sa umaabot nga C ++ 20 nga sumbanan (codenamed C ++ 2a), paglakip sa frontend alang sa D nga pinulongan, partial nga suporta alang sa OpenMP 5.0 , halos kompleto nga suporta para sa OpenACC 2.5, pagdugang sa scalability sa interprocedural optimizations ug optimizations sa binding stage, pagpalapad sa diagnostic tools ug pagdugang sa bag-ong mga pasidaan, backends para sa OpenRISC, C-SKY V2 ug AMD GCN GPU.

nag-unang mga pagbag-o:

  • Gidugang nga suporta alang sa D programming language. Ang GCC naglakip sa frontend nga adunay compiler GDC (Gnu D Compiler) ug runtime nga mga librarya (libphobos), nga nagtugot kanimo sa paggamit sa standard GCC sa paghimo og mga programa sa D programming language. Ang proseso sa pagpagana sa D language support sa GCC nagsugod na balik sa 2011, apan giguyod sa tungod sa panginahanglan sa pagdala sa code ngadto sa pagsunod sa GCC kinahanglanon ug mga problema sa pagbalhin sa mga katungod sa intelektwal nga kabtangan ngadto sa Digital Mars, nga mao ang pagpalambo sa D programming pinulongan;
  • Ang mga pag-ayo gihimo sa code generator. Pananglitan, ang paggamit sa lain-laing mga estratehiya alang sa pagpalapad sa mga ekspresyon sa Switch (jump table, bit test, decision tree) depende sa mga sitwasyon gipatuman. Gidugang ang abilidad sa pagbag-o sa mga linear function nga naglakip sa usa ka Switch expression gamit ang "-ftree-switch-conversion" optimization (pananglitan, usa ka set sa mga kondisyon sama sa "case 2: how = 205; break; case 3: how = 305; break ;” makombertir sa "100 * unsaon + 5";
  • Gipauswag nga interprocedural optimizations. Ang mga setting sa pag-deploy sa inline gipahaom alang sa modernong C++ codebase ug gipalapdan sa bag-ong mga parameter max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns ug uninlined -oras sa huna-huna. Gipauswag ang katukma ug pagkaagresibo sa pagbulag sa bugnaw / init nga code. Gipalambo nga scalability alang sa dako kaayo mga yunit sa paghubad (pananglitan, kung nag-apply sa pag-optimize sa yugto sa pag-link sa dagkong mga programa);
  • Ang mekanismo sa pag-optimize base sa mga resulta sa code profiling (PGO - Profile-guided optimization) gipauswag, nga nagmugna og mas maayo nga code base sa pagtuki sa mga kinaiya sa code execution. Opsyon sa summary "-fprofile-paggamit" karon naglakip sa optimization modes "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ug "-ftree-loop-distribution". Gikuha ang paglakip sa histograms nga adunay mga counter sa mga file, nga nagpamenos sa gidak-on sa mga file nga adunay mga profile (histograms karon namugna sa langaw sa diha nga ang pagbuhat sa optimizations sa panahon sa linking);
  • Gipalambo nga Linking Time Optimizations (LTO). Ang pagpayano sa mga tipo gihatag sa wala pa makamugna ang resulta, nga nagpaposible nga makunhuran ang gidak-on sa mga file sa butang sa LTO, makunhuran ang pagkonsumo sa memorya sa yugto sa pagbugkos, ug mapaayo ang parallelization sa mga operasyon. Ang gidaghanon sa mga partisyon (-param lto-partitions) nadugangan gikan sa 32 ngadto sa 128, nga nagpauswag sa performance sa mga sistema nga adunay daghang mga CPU thread. Usa ka parameter ang gidugang aron makontrol ang gidaghanon sa mga proseso sa pag-optimize
    "-param lto-max-streaming-parallelism";

    Ingon usa ka sangputanan, kung itandi sa GCC 8.3, ang mga pag-optimize nga gipaila sa GCC 9 gitugotan pagpakunhod sa oras sa pag-compile sa Firefox 5 ug LibreOffice 66 sa mga 6.2.3%. Ang gidak-on sa mga file sa butang mikunhod sa 7%. Ang oras sa pagbugkos sa usa ka 8-core nga CPU mikunhod sa 11%. Ang sequential optimization stage sa linking stage kay 28% na nga mas paspas ug 20% ​​na gamay nga memory. Ang konsumo sa memorya sa matag processor sa parallelized stage sa LTO mikunhod ug 30%;

  • Kadaghanan sa parallel programming specification gipatuman alang sa C, C++ ug Fortran nga mga pinulongan OpenACC 2.5, nga naghubit sa mga himan alang sa pag-offload sa mga operasyon sa mga GPU ug mga espesyal nga processor sama sa NVIDIA PTX;
  • Ang partial nga suporta alang sa sumbanan gipatuman para sa C ug C++ Ablihi ang MP 5.0 (Open Multi-Processing), nga naghubit sa API ug mga pamaagi sa pagpadapat sa parallel programming nga mga pamaagi alang sa C, C ++ ug Fortran nga mga pinulongan sa multi-core ug hybrid (CPU+GPU/DSP) nga mga sistema nga adunay shared memory ug vectorization units (SIMD) ;
  • Bag-ong mga pasidaan gidugang alang sa C nga pinulongan: "-Waddress-of-packed-member" (wala magkaparehas nga kantidad sa pointer sa usa ka puno nga miyembro sa usa ka istruktura o unyon) ug
    Β«-Wabsolute-bili" (kung mag-access sa mga function alang sa pagkalkula sa usa ka hingpit nga kantidad, kung adunay usa ka labi ka angay nga function alang sa piho nga argumento, pananglitan, ang mga fabs (3.14) kinahanglan gamiton imbes nga abs (3.14). Bag-ong mga pasidaan gidugang alang sa C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" ug "-Wclass-conversion". Daghang mga pahimangno kaniadto ang gipalapdan;

  • Gidugang ang eksperimento nga suporta alang sa bahin sa umaabot nga sumbanan sa C nga pinulongan, nga gi-codenamed C2x. Aron mahimo ang suporta sa C2x, gamita ang mga opsyon nga "-std=c2x" ug "-std=gnu2x" (aron mahimo ang mga extension sa GNU). Ang sumbanan anaa pa sa sayo nga yugto sa pag-uswag, busa, sa mga kapabilidad niini, ang ekspresyon lamang nga _Static_assert nga adunay usa ka argumento ang gisuportahan (_Static_assert nga adunay duha ka argumento ang gi-standardize sa C11);
  • Ang suporta alang sa C++ 17 nga sumbanan gideklarar nga lig-on. Sa frontend, ang mga kapabilidad sa pinulongan sa C ++ 17 hingpit nga gipatuman, ug sa libstdc ++, ang mga gimbuhaton sa librarya nga gihubit sa sumbanan duol sa hingpit nga pagpatuman;
  • Gipadayon pagpatuman mga elemento sa umaabot nga sumbanan sa C++ 2a. Pananglitan, ang abilidad sa pag-apil sa mga han-ay sa panahon sa pagsugod gidugang, ang mga extension alang sa mga ekspresyon sa lambda gipatuman, suporta alang sa walay sulod nga mga miyembro sa mga istruktura sa datos ug lagmit/dili lagmit nga mga hiyas gidugang, ang abilidad sa pagtawag sa mga virtual nga gimbuhaton sa mga kondisyonal nga ekspresyon gihatag. , ug uban pa.
    Aron mahimo ang suporta sa C++2a, gamita ang "-std=c++2a" ug "-std=gnu++2a" nga mga kapilian. Gidugang ang bit ug version header files sa libstdc++ para sa C++2a, std ::remove_cvref, std ::unwrap_reference, std ::unwrap_decay_ref, std ::is_nothrow_convertible ug std ::type_identity traits, std ::midlerp, std:: , std::bind_front,
    std::visit, std::is_constant_evaluated ug std::assume_aligned, dugang suporta para sa char8_t type, gipatuman ang abilidad sa pagsusi sa prefix ug suffix sa mga string (starts_with, ends_with);

  • Gidugang nga suporta alang sa bag-ong mga processor sa ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ dako.LITTLE ug Neoverse N1. Gidugang nga suporta alang sa mga panudlo nga gipaila sa Armv8.3-A alang sa pagtrabaho sa mga komplikado nga numero, pseudo-random nga henerasyon nga numero (rng) ug memory tagging (memtag), ingon man mga panudlo alang sa pagbabag sa mga pag-atake nga may kalabotan sa espekulatibo nga pagpatuman ug operasyon sa yunit sa prediksyon sa sanga . Alang sa arkitektura sa AArch64, usa ka mode sa pagpanalipod ang gidugang intersection sa stack ug heap (β€œ-fstack-clash-protection”). Aron magamit ang mga bahin sa Armv8.5-A nga arkitektura, ang opsyon nga "-march=armv8.5-a" gidugang

  • Naglakip kini og backend alang sa paghimo og code para sa AMD GPUs base sa GCN microarchitecture. Ang implementasyon sa pagkakaron limitado lamang sa paghugpong sa single-threaded nga mga aplikasyon (suporta alang sa pagpatuman sa multi-threaded nga mga kalkulasyon pinaagi sa OpenMP ug OpenACC itanyag unya) ug suporta sa GPU Fiji ug Vega 10;
  • Gidugang bag-ong backend alang sa mga processor OpenRISC;
  • Gidugang backend alang sa mga processor C-SKY V2, nga gihimo sa kompanya sa China nga parehas nga ngalan alang sa lainlaing mga aparato sa konsumedor;
  • Ang tanan nga mga kapilian sa command line nga naglihok sa mga kantidad sa byte nagsuporta sa mga suffix nga kb, KiB, MB, MiB, GB ug GiB;
  • Gipatuman ang β€œ-flive-patching=[inline-only-static|inline-clone]” nga opsyon nagtugot kanimo nga makab-ot ang luwas nga paghugpong para sa live-patching nga mga sistema tungod sa multi-level nga kontrol sa paggamit sa interprocedural (IPA) pag-optimize;
  • Gidugang ang "--completion" nga kapilian alang sa maayo nga pagkontrol sa pagkompleto sa kapilian kung mogamit bash;
  • Ang mga himan sa diagnostic naghatag mga pagpakita sa gigikanan nga teksto nga mga kinutlo nga nagpaila sa numero sa linya ug biswal nga pagmarka sa may kalabutan nga kasayuran, sama sa mga tipo sa operand. Aron ma-disable ang pagpakita sa mga numero sa linya ug mga label, ang mga opsyon nga "-fno-diagnostics-show-line-numbers" ug "-fno-diagnostics-show-labels" gihatag;

    Pagpagawas sa GCC 9 compiler suite

  • Gipalapdan mga himan alang sa pagdayagnos sa mga kasaypanan sa C ++ code, gipaayo ang pagkabasa sa kasayuran bahin sa mga hinungdan sa mga sayup ug pag-highlight sa mga problema nga mga parameter;

    Pagpagawas sa GCC 9 compiler suite

  • Gidugang nga kapilian "-fdiagnostics-format = json", nga nagtugot sa pagmugna og diagnostic output sa machine-readable format (JSON);
  • Gidugang ang bag-ong mga kapilian sa pag-profile nga "-fprofile-filter-files" ug "-fprofile-exclude-files" aron mapili ang gigikanan nga mga file nga iproseso;
  • Ang AddressSanitizer naghatag og henerasyon sa mas compact verification code alang sa mga automatic variables, nga nagpamenos sa memory consumption sa executable file nga gisusi;
  • Gipauswag nga output sa "-fopt-infoΒ» (detalyadong impormasyon bahin sa dugang nga mga pag-optimize). Gidugang ang mga bag-ong prefix nga "na-optimize" ug "nawala", dugang sa nauna nga magamit nga prefix nga "note". Gidugang nga output sa kasayuran bahin sa paghimog desisyon sa inline-unfolding ug vectorization sa mga siklo;
  • Gidugang ang opsyon nga "-fsave-optimization-record", kung gipiho, gitipigan sa GCC ang SRCFILE.opt-record.json.gz file nga adunay paghulagway sa mga desisyon sa paggamit sa pipila nga mga pag-optimize. Ang bag-ong kapilian lahi sa "-fopt-info" mode pinaagi sa paglakip sa dugang nga metadata, sama sa impormasyon bahin sa profile ug inline nga mga kadena;
  • Gidugang nga mga opsyon nga "-fipa-stack-alignment" ug "-fipa-reference-addressable" aron makontrol ang stack alignment ug ang paggamit sa mga mode sa pag-address (write-only o read-exact) para sa static nga mga variable atol sa interprocedural optimizations;
  • Ang mga bag-ong built-in nga function gipaila aron makontrol ang pagbugkos sa mga hiyas ingon man ang pamatasan nga may kalabotan sa panagna sa sanga ug pagpatuman sa instruksyon nga espekulasyon: "__builtin_adunay_ hiyasΒ«,Β«__builtin_expect_with_probability"Ug"__builtin_speculation_safe_value". Usa ka bag-ong hiyas ang gidugang alang sa mga gimbuhaton, mga variable ug mga tipo kopya;
  • Ang bug-os nga suporta alang sa asynchronous nga input/output gipatuman alang sa Fortran nga pinulongan;
  • Ang suporta alang sa Solaris 10 (*-*-solaris2.10) ug Cell/BE (Cell Broadband Engine SPU) nga mga plataporma wala na gigamit ug tangtangon sa sunod nga mayor nga pagpagawas. Ang suporta alang sa Armv2, Armv3, Armv5 ug Armv5E nga mga arkitektura gihunong na. Ang suporta alang sa Intel MPX (Memory Protection Extension) gihunong na.

Source: opennet.ru

Idugang sa usa ka comment