Famoahana ny GCC 11 compiler suite

Taorian'ny taonan'ny fampandrosoana dia navoaka ny famoahana ny suite compiler GCC 11.1 maimaim-poana, ny famoahana manan-danja voalohany amin'ny sampana GCC 11.x vaovao. Eo ambanin'ny drafitra fanisana vaovao, ny dikan-teny 11.0 dia nampiasaina nandritra ny fampandrosoana, ary fotoana fohy talohan'ny famoahana ny GCC 11.1, dia efa nisaraka ny sampana GCC 12.0, izay hiforonan'ny famoahana manan-danja manaraka ny GCC 12.1.

Ny GCC 11.1 dia miavaka amin'ny fifindrany amin'ny fampiasana ny format DWARF 5 debug rakitra amin'ny alàlan'ny default, ny fampidirana default ny fenitra C++17 (“-std=gnu++17”), fanatsarana lehibe amin'ny fanohanana ny C++20 fenitra, fanohanana andrana ho an'ny C++23, fanatsarana mifandraika amin'ny fenitry ny fiteny C ho avy (C2x), fanatsarana fampisehoana vaovao.

Fiovana lehibe:

  • Ny fomba fanao mahazatra ho an'ny fiteny C++ dia navadika hampiasa ny fenitra C++17 (-std=gnu++17) fa tsy ny C++14 natolotra teo aloha. Azo atao ny manafoana ny fitondran-tena C++ 17 vaovao rehefa manamboatra môdely izay mampiasa môdely hafa ho mari-pamantarana (-fno-new-ttp-matching).
  • Fanampiana fanampiny ho an'ny fanafainganana ny fitaovana amin'ny fitaovana AddressSanitizer, izay ahafahanao mamaritra ny zava-misy amin'ny fidirana amin'ny faritra fitadidiana nafahana, mihoatra ny fetran'ny buffer natokana, ary karazana fahadisoana hafa rehefa miasa miaraka amin'ny fitadidiana. Ny acceleration hardware dia tsy misy afa-tsy amin'ny maritrano AArch64 amin'izao fotoana izao ary mifantoka amin'ny fampiasana rehefa manangona ny kernel Linux. Mba ahafahana manafaingana ny hardware AddressSanitizer rehefa manangana singa habaka mpampiasa, dia nampiana ny saina "-fsanitize=hwaddress", ary ny saina kernel "-fsanitize=kernel-hwaddress".
  • Rehefa mamorona fampahalalam-baovao momba ny debugging, ny endrika DWARF 5 dia ampiasaina amin'ny alàlan'ny default, izay, raha ampitahaina amin'ny dikan-teny teo aloha, dia mamela ny famokarana data debugging 25% kokoa. Ny fanohanana feno ho an'ny DWARF 5 dia mitaky binutils version 2.35.2 farafaharatsiny. Ny endrika DWARF 5 dia tohanana amin'ny fitaovana debugging hatramin'ny GDB 8.0, valgrind 3.17.0, elfutils 0.172 ary dwz 0.14. Mba hamoronana rakitra debug mampiasa dikan-teny DWARF hafa, azonao atao ny mampiasa ny safidy "-gdwarf-2", "-gdwarf-3" ary "-gdwarf-4".
  • Nitombo ny fepetra takiana amin'ny compiler azo ampiasaina hanamboarana GCC. Ny compiler dia tsy maintsy manohana ny fenitra C++ 11 (tsy maintsy C++ 98 teo aloha), i.e. Raha ampy hananganana GCC 10 ny GCC 3.4, dia tsy maintsy misy ny GCC 11 farafaharatsiny mba hananganana GCC 4.8.
  • Ny anarana sy ny toerana misy ny rakitra hotehirizana ny fanariam-pako, ny rakitra vonjimaika ary ny fampahalalana fanampiny ilaina amin'ny fanatsarana ny LTO dia niova. Ny rakitra toy izany dia voatahiry foana ao amin'ny lahatahiry ankehitriny raha tsy hoe ovaina mazava tsara ny lalana amin'ny alàlan'ny safidy "-dumpbase", "-dumpdir" ary "-save-temps=*".
  • Ny fanohanana ny BRIG endrika mimari-droa ampiasaina amin'ny fiteny HSAIL (Heterogenous System Architecture Intermediate Language) dia tsy ampiasaina ary tsy ho ela dia hesorina.
  • Nitarina ny fahafahan'ny maody ThreadSanitizer (-fsanitize=thread), natao hamantarana ny toetry ny hazakazaka rehefa mizara angona mitovy amin'ny kofehy samihafa amin'ny fampiharana misy kofehy maromaro. Ny famoahana vaovao dia manampy fanohanana ny fotoana sy ny tontolo hafa, ary koa ny fanohanana ny KCSAN (Kernel Concurrency Sanitizer) fitaovana debugging, natao hamantarana amin'ny fomba mavitrika ny toetry ny hazakazaka ao anatin'ny kernel Linux. Nampiana safidy vaovao "-param tsan-distinguish-volatile" sy "-param tsan-instrument-func-entry-exit".
  • Ny laharan'ny tsanganana amin'ny hafatra diagnostika izao dia tsy hita taratra ny isan'ny byte hatrany am-piandohan'ny tsipika, fa raha ny marina dia ny laharan'ny tsanganana izay mihevitra ny tarehin-tsoratra sy tarehintsoratra maro-byte mitana toerana maromaro ao amin'ny tsipika (ohatra, ny toetra 🙂 dia manana toerana roa ary dia voakodia amin'ny 4 bytes). Toy izany koa, ny tarehin'ny tabilao dia raisina ho toy ny habaka maromaro (azo amboarina amin'ny alàlan'ny safidy -ftabstop, default 8). Mba hamerenana amin'ny laoniny ny fitondran-tena taloha, dia atolotra ny safidy "-fdiagnostics-column-unit=byte", ary hamaritana ny sanda voalohany (isa amin'ny 0 na 1) - ny safidy "-fdiagnostics-column-origin=".
  • Ny vectorizer dia mandinika ny atiny manontolo amin'ny asa ary manampy ny fahaiza-manao fanodinana mifandray amin'ny sampanan-dalana sy ny fanondroana ireo sakana teo aloha ao amin'ny kisary fanaraha-maso (CFG, kisary fanaraha-maso).
  • Ny optimizer dia mampihatra ny fahafahana mamadika andiana hetsika misy fepetra izay mampitaha ny fari-piainana mitovy ho lasa fanehoana switch. Amin'ny ho avy, ny fitenenana switch dia azo fehezina amin'ny alàlan'ny toromarika fitsapana bit (nampiana ny safidy "-fbit-tests" mba hifehezana ny fiovam-po toy izany).
  • Fanatsarana interprocedural nohatsaraina. Nampiana IPA-modref pass (-fipa-modref) vaovao hanaraha-maso ny voka-dratsiny rehefa miantso asa sy hanatsarana ny fahamarinan'ny fanadihadiana. Fanatsarana ny fampiharana ny IPA-ICF pass (-fipa-icf), izay mampihena ny fanjifana fahatsiarovana mandritra ny fanangonana ary mampitombo ny isan'ny fiasa mitambatra izay atambatra ireo sakana mitovy amin'ny kaody. Ao amin'ny IPA-CP (Interprocedural constant propagation) dia nohatsaraina ny heuristika momba ny vinavina, amin'ny fiheverana ny sisintany fantatra sy ny endriky ny tadivavarana.
  • Ao amin'ny Linking Time Optimizations (LTO), ny format bytecode dia namboarina mba hampihenana ny habeny sy hanatsarana ny hafainganam-pandehan'ny fanodinana. Nihena ny fanjifana fitadidiana ambony indrindra nandritra ny dingana mamatotra.
  • Ao amin'ny mekanika fanatsarana mifototra amin'ny valin'ny fametahana kaody (PGO - Optimization arahin'ny profil), izay mamela ny famokarana kaody tsara indrindra mifototra amin'ny famakafakana ireo endri-javatra famonoana, dia mihena ny haben'ny rakitra miaraka amin'ny angona GCOV noho ny fonosana matevina kokoa amin'ny kaontera zero. . Nohatsaraina ny maody "-fprofile-values" amin'ny alàlan'ny fanaraha-maso ireo masontsivana bebe kokoa amin'ny antso ankolaka.
  • Ny fampiharana ny fenitra OpenMP 5.0 (Open Multi-Processing), izay mamaritra ny API sy ny fomba fampiharana ny fomba fandaharana parallèle amin'ny rafitra multi-core sy hybrid (CPU+GPU/DSP) miaraka amin'ny fahatsiarovana iombonana sy ny vectorization units (SIMD). nitohy. Nampiana fanohanana voalohany ho an'ny toromarika nomena sy ny fahafahana mampiasa tadivavarana heterogène amin'ny fananganana OpenMP. Fanohanana natao ho an'ny fari-piainana OMP_TARGET_OFFLOAD.
  • Ny fampiharana ny fanondroana fandaharana parallèle OpenACC 2.6 ho an'ny fiteny C, C ++ ary Fortran dia nohatsaraina, izay mamaritra ny fitaovana amin'ny famoahana ny asa amin'ny GPU sy ny processeur manokana, toy ny NVIDIA PTX.
  • Ho an'ny fiteny C dia misy toetra vaovao "no_stack_protector" napetraka, natao hanamarihana ireo fiasa izay tsy tokony havela ny fiarovana stack ("-fstack-protector"). Ny toetra "malloc" dia nitarina hanohanana ny famantarana tsiroaroa antso ho an'ny fizarana sy fanafahana fahatsiarovana (allocator/deallocator), izay ampiasaina amin'ny mpandinika static mba hamantarana ny fahadisoana mahazatra amin'ny fiasana amin'ny fitadidiana (tadidy mitete, ampiasaina aorian'ny fanafahana, antso avo roa heny amin'ny asa maimaim-poana, sns.) ary ao amin'ny fampitandremana mpamoron-kira "-Wmismatched-dealloc", "-Wmismatched-new-delete" ary "-Wfree-nonheap-object", mampahafantatra ny tsy fitovian-kevitra eo amin'ny fifampizarana fahatsiarovana sy ny asa fizarana fahatsiarovana.
  • Nampiana fampitandremana vaovao ho an'ny fiteny C:
    • "-Wmismatched-dealloc" (ampidirina amin'ny alàlan'ny default) - mampitandrina momba ny asa fandefasana fahatsiarovana izay mampiasa tondro tsy mifanaraka amin'ny asa fizarana fahatsiarovana.
    • "-Wsizeof-array-div" (azo atao rehefa voatondro ny "-Wall") - Mampitandrina ny amin'ny fizarana roa habe amin'ny mpandraharaha raha toa ka tsy mifanandrify amin'ny haben'ny singa array ny divisor.
    • "-Wstringop-overread" (azo atao amin'ny alàlan'ny default) - mampitandrina momba ny fiantsoana asa tady izay mamaky angona avy amin'ny faritra ivelan'ny sisin-tany.
    • "-Wtsan" (azo atao ny default) - Mampitandrina momba ny fampiasana endri-javatra (toy ny std::atomic_thread_fence) izay tsy tohana ao amin'ny ThreadSanitizer.
    • "-Warray-parameter" sy "-Wvla-parameter" (azo atao rehefa mamaritra ny "-Wall") - mampitandrina momba ny asa manara-penitra miaraka amin'ny fanambarana tsy mifanaraka amin'ny tohan-kevitra mifandraika amin'ny array raikitra sy miovaova.
    • Ny fampitandremana "-Wuninitialized" izao dia mahita ny manandrana mamaky avy amin'ny fitadidiana natokana ho an'ny dinamika tsy fantatra.
    • Ny fampitandremana "-Wfree-nonheap-object" dia manitatra ny famaritana ireo tranga izay iantsoana ny fiasan'ny deallocation fahatsiarovana miaraka amin'ny tondro tsy azo amin'ny alàlan'ny asa fizarana fahatsiarovana mavitrika.
    • Ny fampitandremana "-Wmaybe-uninitialized" dia nanitatra ny fahitana ireo tondro mandalo amin'ny fiasa izay manondro ny toerana fitadidiana tsy fantatra.
  • Ho an'ny fiteny C, ampahany amin'ny endri-javatra vaovao novolavolaina tao anatin'ny rafitry ny fenitra C2X no nampiharina (azo atao amin'ny alalan'ny famaritana -std=c2x sy -std=gnu2x): macros BOOL_MAX sy BOOL_WIDTH, famantarana tsy azo ampiasaina amin'ny anaran'ny masontsivana tsy ampiasaina amin'ny asa. famaritana (toy ny ao amin'ny C++), toetra "[ [nodiscard]]", operator preprocessor "__has_c_attribute", macros FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC___, INFINITY_WANT_IEC_60559, __STDC_WANT_IEC___, INFINITY_NAN, INFINITY_XNUMX. NAN, DEC_INFINITY ary DEC _NAN, NaN=macro ho an'ny FloatN, _FloatNx ary _DecimalN, fahafahana mamaritra marika mitsambikina alohan'ny fanambarana sy amin'ny faran'ny fanambarana mitambatra.
  • Ho an'ny C ++, ny ampahany amin'ny fanovana sy ny fanavaozana atolotra ao amin'ny fenitra C ++ 20 dia nampiharina, anisan'izany ny fiasa virtoaly "consteval virtoaly", pseudo-destructors amin'ny fiafaran'ny tsingerin'ny fiainan'ny zavatra, ny fampiasana ny kilasy enum ary kajy ny haben'ny andry iray amin'ny fomba fiteny "vaovao".
  • Ho an'ny C++ dia nampiana fanohanana andrana ho an'ny fanatsarana sasany novolavolaina ho an'ny fenitra C++23 ho avy (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). Ohatra, misy fanohanana ny tovana ara-bakiteny "zu" ho an'ny soatoavina size_t voasonia.
  • libstdc++ dia nanatsara ny fanohanana ny fenitra C++17, anisan'izany ny fampidirana std ::from_chars sy std ::to_chars fampiharana ho an'ny karazana teboka mitsingevana. Nametraka singa vaovao amin'ny fenitra C++20, ao anatin'izany ny std::bit_cast, std::source_location, hetsika atomika miandry sy mampandre, , , , , ary koa ireo singa amin'ny ho avy C++ fenitra 23 (std::to_underlying, std::is_scoped_enum). Fanampiana andrana fanampiny ho an'ny karazana fanodinana angona mifanitsy (SIMD, Karazana Data-Parallel). Nohafainganina ny fampiharana ny std::uniform_int_distribution.
  • Nesorina tao amin'ny libgccjit ny saina momba ny kalitao alfa, tranomboky ifampizarana hampidirana mpamokatra kaody amin'ny dingana hafa ary hampiasana azy io handaminana ny JIT fanangonana ny bytecode ho kaody milina. Nampiana ny fahafahana manangana libgccjit ho an'ny MinGW.
  • Fanohanana fanampiny ho an'ny maritrano AArch64 Armv8-R (-march=armv8-r). Ho an'ny maritrano AArch64 sy ARM dia nampiana ny fanohanana ny processeur (parameter -mcpu sy -mtune): Arm Cortex-A78 (cortex-a78), Arm Cortex-A78AE (cortex-a78ae), Arm Cortex-A78C (cortex-a78c) , Arm Cortex- X1 (cortex-x1), Arm Neoverse V1 (neoverse-v1) ary Arm Neoverse N2 (neoverse-n2). Ny CPU Fujitsu A64FX (a64fx) sy Arm Cortex-R82 (cortex-r82) dia nampiana ihany koa, izay tsy manohana afa-tsy ny maritrano AArch64.
  • Fanohanana fanampiny amin'ny fampiasana Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) ary MVE (AArch32 M-profile) torolalana SIMD ho an'ny autovectorize ny asa manao fanampim-panampiana, fanalana, fampitomboana ary variana fanampiny / fanalana. isa sarotra. Nanampy fanohanana voalohany ho an'ny autovectorization ho an'ny ARM amin'ny alàlan'ny set fampianarana MVE.
  • Ho an'ny sehatra ARM, misy andiana asa C (Intrinsics) feno compiler, nosoloina torolalana vector (SIMD), mandrakotra ny torolàlana NEON rehetra voarakitra ao amin'ny famaritana ACLE Q3 2020.
  • Ny fanohanana ny gfx908 GPU dia nampiana tao amin'ny backend mba hamoronana kaody ho an'ny AMD GPU mifototra amin'ny microarchitecture GCN.
  • Fanampiana fanampiny ho an'ny processeurs vaovao sy ny fanitarana vaovao napetraka ao aminy:
    • Intel Sapphire Rapids (-march=sapphirerapids, dia manome fanohanana ny MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT8, ANIMX-BF-16 ary ANIMX-BFVN
    • Intel Alderlake (-march=alderlake, manome fanohanana ny toromarika CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI ary HRESET).
    • Intel Rocketlake (-march=rocketlake, mitovy amin'ny Rocket Lake tsy misy fanohanana SGX).
    • AMD Zen 3 (-mars=znver3).
  • Ho an'ny rafitra IA-32/x86-64 mifototra amin'ny processeur Intel, dia nampiana ny fanohanana ny torolàlana momba ny processeur TSXLDTRK, SERIALIZE, HRESET, UITRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI.
  • Fanampiana fanampiny ho an'ny saina "-march=x86-64-v[234]" hisafidianana ny haavon'ny maritrano x86-64 (v2 - mandrakotra ny fanitarana SSE4.2, SSSE3, POPCNT ary CMPXCHG16B; v3 - AVX2 sy MOVBE; v4 - AVX-512 ).
  • Fanampiana fanampiny ho an'ny rafitra RISC-V miaraka amin'ny baiko byte lehibe. Nampiana "-misa-spec="*" safidy hisafidianana ny dikan-tenin'ny RISC-V torolàlana momba ny maritrano. Fanampiana fanampiny ho an'ny AddressSanitizer sy fiarovana ny stack amin'ny alàlan'ny marika canary.
  • Fitohizan'ny fanatsarana ny fomba famakafakana static "-fanalyzer", izay manao famakafakana interprocedural misy loharanon-karena amin'ny lalan'ny famonoana kaody sy ny fikorianan'ny angona ao amin'ny fandaharana. Ny maodely dia afaka mamantatra ny olana amin'ny dingana fanangonana, toy ny antso avo roa heny amin'ny asa maimaim-poana () ho an'ny faritra fitadidiana iray, ny fiparitahan'ny rakitra, ny famandrihana sy ny fandefasana tondro tsy misy dikany, ny fidirana amin'ny sakana fahatsiarovana navotsotra, ny fampiasana sanda tsy fantatra, sns. Ao amin'ny dikan-teny vaovao:
    • Nosoratana tanteraka ny kaody fanaraha-maso ny toetry ny programa. Voavaha ny olana amin'ny fisavana rakitra C tena lehibe.
    • Nampiana fanohanana C++ voalohany.
    • Ny famatsiana fahatsiarovana sy ny famakafakana deallocation dia nalaina avy amin'ny malloc manokana sy ny asa maimaim-poana, ary ankehitriny dia manohana vaovao/mamafa sy vaovao []/mamafa [].
    • Nampiana fampitandremana vaovao: -Wanalyzer-shift-count-negative, -Wanalyzer-shift-count-overflow, -Wanalyzer-write-to-const ary -Wanalyzer-write-to-string-literal.
    • Nampiana safidy debugging vaovao -fdump-analyzer-json sy -fno-analyzer-feasibility.
    • Ny fahafahana manitatra ny mpandinika amin'ny alàlan'ny plugins ho an'ny GCC dia efa nampiharina (ohatra, misy plugin nomanina hanamarina ny fampiasana diso ny global locking (GIL) ao amin'ny CPython).

Source: opennet.ru

Add a comment