Fa'asa'olotoina o le GCC 11 fa'apipi'i seti

A maeʻa le tausaga o le atinaʻe, ua faʻasaʻolotoina le free compiler suite GCC 11.1, o le faʻasalalauga taua muamua i le lala fou GCC 11.x. E tusa ai ma le faʻasologa fou o le faʻasologa o numera, o le version 11.0 na faʻaaogaina i le faʻagasologa o le atinaʻeina, ma e leʻi umi ae leʻi tuʻuina atu le GCC 11.1, o le lala o le GCC 12.0 ua uma ona lala, lea o le a faia ai le isi faʻasalalauga tele, GCC 12.1.

GCC 11.1 e lauiloa mo lona suiga i le faʻaogaina o le DWARF 5 debug file format e ala i le faaletonu, o le faʻaogaina o le C ++ 17 standard ("-std = gnu ++ 17"), faʻaleleia atili i le lagolago mo le C ++ 20 tulaga, lagolago faataitai mo C ++ 23, faaleleia e faatatau i le lumanai C gagana tulaga (C2x), optimizations faatinoga fou.

Suiga autu:

  • O le tulaga fa'aletonu mo le gagana C++ ua suia e fa'aoga le C++17 standard (-std=gnu++17) nai lo le C++14 na ofoina muamua. E mafai ona filifili faʻamalo le amio fou C ++ 17 pe a faʻaogaina faʻataʻitaʻiga e faʻaogaina isi faʻataʻitaʻiga e fai ma parakalafa (-fno-new-ttp-matching).
  • Faʻaopoopoina le lagolago mo le faʻavaveina o meafaigaluega o le AddressSanitizer meafaigaluega, lea e mafai ai e oe ona fuafua mea moni o le mauaina o nofoaga faʻasaʻoloto, alu i tua atu o tuaoi o le paʻu tuʻufaʻatasia, ma isi ituaiga o mea sese pe a galue ma manatua. O loʻo avanoa nei le faʻavaveina o meafaigaluega mo le AArch64 architecture ma o loʻo taulaʻi i le faʻaogaina pe a tuʻufaʻatasia le fatu Linux. Ina ia mafai ona faʻavavevave meafaigaluega a AddressSanitizer pe a fausia vaega avanoa mo tagata faʻaoga, o le fuʻa "-fsanitize=hwaddress" ua faʻaopoopoina, ma le kernel fuʻa "-fsanitize=kernel-hwaddress".
  • Pe a faʻatupuina faʻamatalaga faʻamatalaga, o le DWARF 5 format e faʻaaogaina e ala i le le mafai, lea, pe a faʻatusatusa i lomiga muamua, e mafai ai ona maua le 25% sili atu faʻamaumauga faʻapipiʻi faʻatusatusa. Lagolago atoatoa mo DWARF 5 e mana'omia a itiiti mai binutils version 2.35.2. DWARF 5 format e lagolagoina i le debugging meafaigaluega talu mai GDB 8.0, valgrind 3.17.0, elfutils 0.172 ma dwz 0.14. Mo le fa'atupuina o faila debug e fa'aaoga ai isi fa'aliliuga o le DWARF, e mafai ona e fa'aogaina filifiliga "-gdwarf-2", "-gdwarf-3" ma le "-gdwarf-4".
  • O manaʻoga mo tagata faʻapipiʻi e mafai ona faʻaogaina e fausia ai le GCC ua faʻateleina. E tatau i le tagata faʻapipiʻi ona lagolagoina le C ++ 11 standard (sa manaʻomia muamua C ++ 98), i.e. Afai na lava le GCC 10 e fau ai le GCC 3.4, e mana'omia nei le GCC 11 e fausia ai le GCC 4.8.
  • O le igoa ma le nofoaga o faila mo le teuina o otaota, faila le tumau ma faʻamatalaga faaopoopo e manaʻomia mo le LTO optimization ua suia. O faila ia o loʻo faʻasaoina i taimi uma i le lisi o loʻo i ai nei seivagana ua suia manino le ala e ala i le "-dumpbase", "-dumpdir" ma le "-save-temps=*" filifiliga.
  • Lagolago mo le faatulagaga binary BRIG mo le faaaogaina i le gagana HSAIL (Heterogenous System Architecture Intermediate Language) ua le toe faaaogaina ma e le o toe umi ae aveese.
  • O le gafatia o le ThreadSanitizer mode (-fsanitize=thread) ua faʻalauteleina, ua fuafuaina e iloa ai tulaga tuuga pe a faʻasoa faʻamatalaga tutusa mai filo eseese o se faʻaoga tele-filo. O le faʻasalalauga fou e faʻaopoopoina le lagolago mo isi taʻaloga ma siʻosiʻomaga, faʻapea foʻi ma le lagolago mo le KCSAN (Kernel Concurrency Sanitizer) faʻapipiʻi meafaigaluega, ua mamanuina e iloagofie ai tulaga tuuga i totonu ole fatu Linux. Faʻaopoopo filifiliga fou "-param tsan-distinguish-volatile" ma le "-param tsan-instrument-func-entry-exit".
  • O numera o koluma i faʻamatalaga faʻamaonia o loʻo atagia mai nei e le o le numera o le byte mai le amataga o le laina, ae o le mea moni o numera koluma e amanaʻia ai le tele-byte mataitusi ma mataitusi o loʻo nofoia le tele o tulaga i le laina (mo se faʻataʻitaʻiga, o le amio 🙂 e lua tulaga ma ua fa'ailoga i le 4 paita). E faʻapea foʻi, o faʻamaufaʻailoga o loʻo vaʻaia nei o se numera patino o avanoa (faʻapipiʻi e ala i le filifiliga -ftabstop, faaletonu 8). Ina ia toe faʻafoʻisia le amio tuai, o le "-fdiagnostics-column-unit=byte" o loʻo tuʻuina atu, ma fuafua le tau muamua (faʻanumera mai le 0 poʻo le 1) - le "-fdiagnostics-column-origin =" filifiliga.
  • E amanaia e le vectorizer mea uma o loʻo i totonu o le galuega ma faʻaopoopoina gafatia gaioiga e fesoʻotaʻi ma fesoʻotaʻiga ma faʻamatalaga i poloka muamua i le kalafi faʻatonutonu-fesoasoani (CFG, kalafi faʻatonutonu-fesoasoani).
  • E fa'atino e le optimizer le agava'a e fa'aliliu ai se fa'asologa o fa'atinoga fa'atulagaina e fa'atusatusa ai le fesuiaiga tutusa i se fa'aaliga sui. O le fa'aaliga sui e mafai ona fa'asolo mulimuli ane e fa'aaoga ai fa'atonuga o su'ega (o le "-fbit-tests" filifiliga ua fa'aopoopoina e pulea ai sea liua).
  • Fa'aleleia le fa'ata'ita'iina o feso'ota'iga. Faʻaopoopoina se pasi IPA-modref fou (-fipa-modref) e siaki ai aʻafiaga pe a valaʻau galuega ma faʻaleleia le saʻo o le auiliiliga. Faʻaleleia le faʻatinoga o le IPA-ICF pass (-fipa-icf), lea e faʻaitiitia ai le mafaufau i le taimi o le tuʻufaʻatasia ma faʻateleina le numera o galuega faʻatasi e tuʻufaʻatasia ai poloka tutusa o code. I le IPA-CP (Interprocedural constant propagation), ua faʻaleleia atili le faʻasologa o le vavalo, ma amanaʻia tuaoi iloa ma foliga o matasele.
  • I le Linking Time Optimizations (LTO), o le bytecode format e sili ona lelei e faʻaitiitia ai le tele ma faʻaleleia le saoasaoa o gaioiga. Fa'aiti'itia le fa'aogaina o manatuaga maualuga i le taimi o le fusifusia.
  • I le faʻaogaina o le masini e faʻavae i luga o faʻaiʻuga o le faʻasologa o faʻamatalaga (PGO - Faʻamatalaga-faʻatonuina o faʻamatalaga), lea e mafai ai ona faʻatupuina le code sili atu ona lelei e faʻavae i luga o le auiliiliga o faʻatinoga o faʻatinoga, o le tele o faila ma faʻamatalaga GCOV ua faʻaitiitia ona o le faʻapipiʻiina sili atu o faʻamaufaʻailoga zero. . Fa'aleleia le faiga "-fprofile-values" e ala i le mata'ituina o isi fa'amaufa'ailoga i luga o vala'au le tuusao.
  • O le faʻatinoga o le OpenMP 5.0 (Open Multi-Processing), o loʻo faʻamatalaina ai le API ma auala mo le faʻaogaina o auala faʻapipiʻi tutusa i luga o le tele-core ma hybrid (CPU + GPU / DSP) faʻatasi ma le faʻasoa faʻatasi ma iunite vectorization (SIMD), ua i ai. faaauau. Faʻaopoopoina le lagolago muamua mo le faʻatonuina o le faʻatonuga ma le mafai ona faʻaogaina faʻaoga eseese i OpenMP faufale. Fa'atino lagolago mo le suiga ole siosiomaga OMP_TARGET_OFFLOAD.
  • O le faʻatinoga o le OpenACC 2.6 parallel programming specification na tuʻuina atu mo C, C ++ ma Fortran gagana ua faʻaleleia, lea e faʻamatalaina ai meafaigaluega mo le faʻaogaina o gaioiga i GPU ma faʻapitoa faʻapitoa, e pei o le NVIDIA PTX.
  • Mo gagana C, o se uiga fou "no_stack_protector" ua faʻatinoina, ua fuafuaina e faʻailoga galuega e le tatau ona faʻaogaina ai le puipuiga o le faaputuga (“-fstack-protector”). O le uiga o le "malloc" ua faʻalauteleina e lagolago ai le faʻamaoniaina o paga o valaʻau mo le tuʻufaʻatasia ma le faʻasaʻolotoina o le manatua (allocator/deallocator), lea e faʻaaogaina i le static analyzer e faʻamaonia ai mea sese masani i le galue ma le manatua (mafaufau galo, faʻaoga pe a uma ona faʻasaʻoloto, valaau faalua i le galuega saoloto, ma isi) ma i le compiler lapataiga "-Wmismatched-dealloc", "-Wmismatched-new-delete" ma le "-Wfree-nonheap-object", logoina e uiga i le le ogatasi i le va o manatu deallocation ma gaoioiga faasoasoaina manatua.
  • Ua faaopoopo lapataiga fou mo le gagana C:
    • "-Wmismatched-dealloc" (fa'aogaina e ala i le faaletonu) - lapata'i e uiga i fa'agaioiga fefa'asoaa'i manatua e fa'aaoga ai se fa'asino e le fetaui ma galuega fa'asoa manatua.
    • "-Wsizeof-array-div" (fa'aogaina pe a fa'amaoti le "-Wall) - Lapata'i e uiga i le vaevaeina o le tele o fa'agaioiga pe a le fetaui le vaeluaga ma le tele o le elemene elemene.
    • "-Wstringop-overread" (fa'aogaina e ala i le faaletonu) - lapata'i e uiga i le vala'au o se manoa galuega e faitau fa'amatalaga mai se vaega i fafo atu o le laina laina.
    • "-Wtsan" (fa'aogaina e ala i le faaletonu) - Lapata'i e uiga i le fa'aogaina o foliga (pei o le std::atomic_thread_fence) e le o lagolagoina i le ThreadSanitizer.
    • “-Warray-parameter” ma le “-Wvla-parameter” (e mafai pe a faamaoti le “-Wall”) - lapata'i e uiga i galuega fa'atosina ma ta'utinoga le fetaui o finauga e feso'ota'i ma fa'asologa tumau ma fesuia'i umi.
    • O le lapataiga "-Wuninitialized" o loʻo iloa nei taumafaiga e faitau mai le mafaufau e leʻi amataina.
    • O le lapata'iga "-Wfree-nonheap-object" e fa'alauteleina ai le fa'amatalaga o mataupu e vala'au ai galuega fa'asoa manatua ma se fa'ailoga e le'i maua e ala i galuega fa'asoa fa'amanatu.
    • O le lapataiga "-Wmaybe-uninitialized" ua faʻalauteleina le iloa o faʻailoga pasi i galuega e faʻasino i nofoaga e leʻi faʻaogaina.
  • Mo le gagana C, o se vaega o foliga fou ua atiaʻe i totonu o le faʻavae o le C2X faʻataʻitaʻiga ua faʻatinoina (faʻamalosia e ala i le faʻamaonia -std = c2x ma -std = gnu2x): macros BOOL_MAX ma BOOL_WIDTH, faʻailoga filifiliga o igoa o faʻamaufaʻailoga e le faʻaaogaina i galuega. fa'auigaga (pei o le C++), uiga “[ [nodiscard]]", fa'agaioiga muamua "__has_c_attribute", macros FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_60559, FLT_TYS, INFINITY_XNUMX. _SNAN, DEC_INFINITY ma DEC_NAN, NaN=macro mo FloatN , _FloatNx ma _DecimalN, mafai ona fa'ailoa fa'ailoga oso a'o le'i ta'utinoga ma i le fa'ai'uga o fa'amatalaga tu'ufa'atasi.
  • Mo C ++, o se vaega o suiga ma faʻafouga ua faʻatulagaina i le C ++ 20 faʻataʻitaʻiga ua faʻatinoina, e aofia ai galuega faʻapitoa "consteval virtual", pseudo-destructors mo le faaiuga o le taamilosaga o le olaga o mea faitino, le faʻaogaina o le vasega enum ma fa'atatauina le tele o se fa'asologa i le fa'aaliga "fou".
  • Mo C ++, ua faʻaopoopoina le lagolago faʻataʻitaʻi mo nisi faʻaleleia o loʻo atiaʻe mo le lumanaʻi C++ 23 tulaga (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). Mo se faʻataʻitaʻiga, o loʻo i ai nei le lagolago mo le suffix moni "zu" mo tau saini size_t.
  • libstdc ++ ua faʻaleleia atili le lagolago mo le C ++ 17 tulaga, e aofia ai le faʻaofiina o le std :: from_chars ma std :: to_chars faʻatinoga mo ituaiga faʻafefe. O elemene fou o le C ++ 20 faʻataʻitaʻiga ua faʻatinoina, e aofia ai std :: bit_cast, std :: source_location, atomic operations faatalitali ma logo, , , , , faʻapea foʻi ma elemene o le lumanaʻi C ++ 23 standard (std::to_underlying, std::is_scoped_enum). Fa'aopoopoina le lagolago fa'ata'ita'i mo ituaiga mo fa'asologa o fa'amaumauga tutusa (SIMD, Fa'amaumauga-Parallel Types). O le faʻatinoga o le std::uniform_int_distribution ua faʻavaveina.
  • Ave'ese le fu'a fa'aalfa mai le libgccjit, o se faletusi fa'asoa mo le fa'apipi'iina o se fa'atupu tulafono i isi faiga ma fa'aogaina e fa'atulaga ai le JIT tu'ufa'atasiga o le bytecode i totonu ole masini. Faʻaopoopo le tomai e fausia libgccjit mo MinGW.
  • Faʻaopoopo le lagolago mo le faʻataʻitaʻiga AArch64 Armv8-R (-march=armv8-r). Mo AArch64 ma ARM fausaga, lagolago mo processors ua faaopoopo (parameters -mcpu ma -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) ma le Arm Neoverse N2 (neoverse-n2). Fujitsu A64FX (a64fx) ma Arm Cortex-R82 (cortex-r82) CPU ua faʻaopoopoina, lagolago naʻo le AArch64 architecture.
  • Faʻaopoopo le lagolago mo le faʻaaogaina o Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) ma le MVE (AArch32 M-profile) faʻatonuga SIMD e faʻaogaina ai le faʻaogaina o faʻaopoopoga, toese, faʻateleina ma fesuiaiga o faʻaopoopoga / toesea i luga. numera lavelave. Faʻaopoopo le lagolago muamua mo le autovectorization mo ARM faʻaaogaina le MVE faʻatonuga seti.
  • Mo ARM platforms, o loʻo tuʻuina atu se seti atoa o galuega faʻapipiʻi faʻapipiʻi C (Intrinsics), e suitulaga i faʻatonuga faʻalautele (SIMD), e aofia uma ai faatonuga a le NEON o loʻo tusia i le ACLE Q3 2020 faʻamatalaga.
  • Lagolago mo le gfx908 GPU ua faaopoopo i le pito i tua mo le fausiaina o code mo AMD GPU e faavae ile GCN microarchitecture.
  • Faʻaopoopo le lagolago mo faʻasalalauga fou ma faʻaopoopoga seti fou faʻapipiʻiina i totonu ia i latou:
    • Intel Sapphire Rapids (-march=sapphirerapids, e mafai ai ona lagolago mo le MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT8, ANIXV-BF16 ma ANIX-BFXNUMX
    • Intel Alderlake (-march=alderlake, faʻatagaina le lagolago mo CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI ma HRESET faatonuga).
    • Intel Rocketlake (-march=rocketlake, tutusa ma Rocket Lake e aunoa ma le lagolago SGX).
    • AMD Zen 3 (-march=znver3).
  • Mo IA-32 / x86-64 faiga faʻavae i luga ole Intel processors, lagolago mo faatonuga fou processor TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI ua faaopoopo.
  • Fa'aopoopoina le lagolago mo fu'a "-march=x86-64-v[234]" e filifili ai tulaga faufale x86-64 (v2 - e aofia ai fa'aopoopoga SSE4.2, SSSE3, POPCNT ma CMPXCHG16B; v3 - AVX2 ma MOVBE; v4 - AVX-512 ).
  • Faʻaopoopoina le lagolago mo faiga RISC-V faʻatasi ai ma le tele-endian byte order. Faʻaopoopoina le "-misa-spec="*" filifiliga e filifili ai le faʻasologa o le RISC-V faʻatonuga faʻatulagaina faʻatulagaina fausaga. Faʻaopoopo le lagolago mo AddressSanitizer ma le faʻapipiʻi puipuiga e faʻaaoga ai pine canary.
  • Faʻaauau le faʻaleleia atili o le "-fanalyzer" faʻataʻitaʻiga faʻataʻitaʻiga faʻataʻitaʻiga, lea e faʻatino ai suʻesuʻega faʻasalalauga faʻapitoa-o le faʻaogaina o auala faʻasologa ma faʻamaumauga faʻamaumauga i totonu o le polokalame. O le auala e mafai ona iloa ai faʻafitauli i le tuʻufaʻatasiga tulaga, e pei o le faaluaina o le telefoni i le free() galuega mo le tasi vaega manatua, faʻamatalaga faila leaks, dereferencing ma pasi null pointers, faʻafeiloaʻi poloka manatua saoloto, faʻaaogaina tulaga taua, ma isi. I le lomiga fou:
    • O le code mo le siakiina o le tulaga o le polokalame ua uma ona toe tusia. O fa'afitauli ile su'eina o faila C tetele tele ua fo'ia.
    • Fa'aopoopoina le lagolago muamua C++.
    • O le faasoasoaina o manatuaga ma le su'esu'eina o fefa'ataua'iga ua aveese mai le malloc ma'oti ma galuega e leai se totogi, ma ua lagolagoina nei le fou/tapē ma le fou[]/delete [].
    • Faʻaopoopo lapataiga fou: -Wanalyzer-shift-count-negative, -Wanalyzer-shift-count-overflow, -Wanalyzer-write-to-const ma -Wanalyzer-write-to-string-literal.
    • Faʻaopoopoina filifiliga faʻapipiʻi fou -fdump-analyzer-json ma -fno-analyzer-feasibility.
    • O le gafatia e faʻalautele le suʻesuʻe e ala i plugins mo le GCC ua faʻatinoina (mo se faʻataʻitaʻiga, ua saunia se faʻapipiʻi e siaki le faʻaoga sese o le lokaina o le lalolagi (GIL) i le CPython).

puna: opennet.ru

Faaopoopo i ai se faamatalaga