Tso tawm ntawm GCC 11 compiler suite

Tom qab ib xyoos ntawm txoj kev loj hlob, lub free compiler suite GCC 11.1 tau raug tso tawm, thawj qhov tseem ceeb tso tawm hauv GCC 11.x tshiab ceg. Raws li cov txheej txheem tshiab tso tawm tus lej, version 11.0 tau siv rau hauv txoj kev txhim kho, thiab tsis ntev ua ntej kev tso tawm ntawm GCC 11.1, GCC 12.0 ceg tau tawg lawm, los ntawm qhov kev tso tawm loj tom ntej, GCC 12.1, yuav raug tsim.

GCC 11.1 yog qhov tseem ceeb rau nws txoj kev hloov mus rau kev siv DWARF 5 debug cov ntaub ntawv hom los ntawm lub neej ntawd, lub neej ntawd suav nrog C ++ 17 tus qauv ("-std = gnu ++ 17"), kev txhim kho tseem ceeb hauv kev txhawb nqa rau C ++ 20 tus qauv, kev sim txhawb rau C ++ 23, kev txhim kho ntsig txog yav tom ntej C hom lus (C2x), kev ua tau zoo tshiab.

Cov kev hloov loj:

  • Lub neej ntawd hom rau C ++ hom lus tau hloov mus siv C ++ 17 tus qauv (-std = gnu ++ 17) es tsis txhob ntawm C ++ 14 yav dhau los. Nws muaj peev xwm xaiv lov tes taw tus cwj pwm tshiab C ++ 17 thaum ua cov qauv uas siv lwm cov qauv ua ib qho parameter (-fno-new-ttp-matching).
  • Ntxiv kev txhawb nqa rau kho vajtse acceleration ntawm AddressSanitizer cov cuab yeej, uas tso cai rau koj los txiav txim qhov tseeb ntawm kev nkag mus rau thaj chaw nco, mus dhau ntawm thaj tsam ntawm kev faib tsis pub, thiab qee hom kev ua yuam kev thaum ua haujlwm nrog lub cim xeeb. Kho vajtse acceleration tam sim no tsuas yog muaj rau AArch64 architecture thiab tsom rau kev siv thaum sau cov Linux ntsiav. Txhawm rau pab kom AddressSanitizer kho vajtse acceleration thaum tsim cov neeg siv qhov chaw Cheebtsam, tus chij "-fsanitize = hwaddress" tau ntxiv, thiab lub ntsiab chij "-fsanitize = kernel-hwaddress".
  • Thaum tsim cov ntaub ntawv debugging, DWARF 5 hom ntawv yog siv los ntawm lub neej ntawd, uas, piv rau yav dhau los versions, tso cai tsim 25% ntau compact debugging cov ntaub ntawv. Kev txhawb nqa tag nrho rau DWARF 5 yuav tsum muaj tsawg kawg yog binutils version 2.35.2. DWARF 5 hom ntawv txhawb nqa hauv cov cuab yeej debugging txij li GDB 8.0, valgrind 3.17.0, elfutils 0.172 thiab dwz 0.14. Txhawm rau tsim cov ntaub ntawv debug siv lwm cov qauv ntawm DWARF, koj tuaj yeem siv cov kev xaiv "-gdwarf-2", "-gdwarf-3" thiab "-gdwarf-4".
  • Cov kev cai rau cov compilers uas tuaj yeem siv los tsim GCC tau nce ntxiv. Lub compiler yuav tsum tam sim no txhawb C ++ 11 tus qauv (yav dhau los C ++ 98 yuav tsum tau), piv txwv li. Yog tias GCC 10 txaus los tsim GCC 3.4, ces tsawg kawg GCC 11 tam sim no yuav tsum tau tsim GCC 4.8.
  • Lub npe thiab qhov chaw ntawm cov ntaub ntawv khaws tseg, cov ntaub ntawv ib ntus thiab cov ntaub ntawv ntxiv uas tsim nyog rau LTO optimization tau raug hloov. Xws li cov ntaub ntawv tam sim no yeej ib txwm khaws cia rau hauv daim ntawv teev npe tam sim no tshwj tsis yog txoj hauv kev tau hloov pauv ntawm "-dumpbase", "-dumpdir" thiab "-save-temps = *" kev xaiv.
  • Kev them nyiaj yug rau binary hom BRIG rau siv nrog HSAIL (Heterogeneous System Architecture Intermediate Language) tau raug deprecated thiab yuav sai sai no tshem tawm.
  • Lub peev xwm ntawm ThreadSanitizer hom (-fsanitize = xov) tau nthuav dav, tsim los txheeb xyuas cov xwm txheej ntawm haiv neeg thaum sib koom cov ntaub ntawv tib yam los ntawm cov xov sib txawv ntawm cov ntawv thov ntau txoj xov. Qhov kev tso tawm tshiab ntxiv kev txhawb nqa rau lwm lub sijhawm ua haujlwm thiab ib puag ncig, nrog rau kev txhawb nqa rau KCSAN (Kernel Concurrency Sanitizer) debugging cuab yeej, tsim los txhawm rau txheeb xyuas cov haiv neeg nyob hauv Linux kernel. Ntxiv cov kev xaiv tshiab "-param tsan-distinguish-volatile" thiab "-param tsan-instrument-func-entry-exit".
  • Kab zauv hauv cov lus tshuaj ntsuam xyuas tam sim no tsis cuam tshuam txog cov byte suav txij thaum pib ntawm kab, tab sis qhov tseeb cov kab zauv uas coj mus rau hauv tus lej ntau-byte cim thiab cov cim tuav ntau txoj haujlwm hauv kab (piv txwv li, tus cim πŸ™‚ tuav ob txoj haujlwm thiab yog encoded hauv 4 bytes). Ib yam li ntawd, cov cim tab tam sim no raug kho raws li qee qhov chaw (configurable ntawm -ftabstop xaiv, default 8). Txhawm rau rov qab tus cwj pwm qub, qhov "-fdiagnostics-column-unit = byte" kev xaiv yog npaj, thiab txiav txim siab tus nqi pib (tus lej los ntawm 0 lossis 1) - qhov "-fdiagnostics-column-origin =" kev xaiv.
  • Lub vectorizer coj mus rau hauv tus account tag nrho cov ntsiab lus ntawm kev ua haujlwm thiab ntxiv cov peev txheej ua haujlwm cuam tshuam nrog kev sib tshuam thiab kev xa mus rau cov blocks yav dhau los hauv cov kab tswj-khiav (CFG, tswj-khiav graph).
  • Lub optimizer siv lub peev xwm los hloov ntau yam kev ua haujlwm raws li kev ua haujlwm uas sib piv tib qhov sib txawv rau hauv kev hloov pauv. Nyob rau hauv lub neej yav tom ntej, qhov kev hloov pauv tuaj yeem raug encoded siv cov lus qhia ntsuas me ntsis (qhov "-fbit-tests" kev xaiv tau ntxiv los tswj cov kev hloov pauv no).
  • Txhim kho cov txheej txheem kev ua haujlwm zoo. Ntxiv qhov tshiab IPA-modref pass (-fipa-modref) txhawm rau taug qab cov kev mob tshwm sim thaum hu xov tooj ua haujlwm thiab txhim kho qhov tseeb ntawm kev tshuaj xyuas. Txhim kho qhov kev siv ntawm IPA-ICF pass (-fipa-icf), uas txo qis kev siv lub cim xeeb thaum muab tso ua ke thiab ua rau kom muaj cov haujlwm sib koom ua ke uas zoo ib yam ntawm cov lej sib xyaw ua ke. Nyob rau hauv IPA-CP (Interprocedural tsis tu ncua propagation) dhau, qhov kev kwv yees heuristics tau raug txhim kho, coj mus rau hauv tus account paub ciam teb thiab cov yam ntxwv ntawm lub voj.
  • Hauv Linking Time Optimizations (LTO), cov hom bytecode tau ua kom zoo kom txo qhov loj me thiab txhim kho kev ua haujlwm ceev. Txo qhov ncov nco qab noj thaum lub sij hawm khi.
  • Nyob rau hauv lub optimization mechanism raws li cov txiaj ntsig ntawm code profiling (PGO - Profile-guided optimization), uas tso cai rau tsim ntau qhov kev pom zoo raws li kev soj ntsuam ntawm kev ua tiav, qhov loj ntawm cov ntaub ntawv nrog GCOV cov ntaub ntawv raug txo vim ntau compact ntim ntawm xoom txee. . Txhim kho "-fprofile-values" hom los ntawm kev taug qab ntawm ntau qhov kev txwv ntawm kev hu tsis ncaj.
  • Kev siv ntawm OpenMP 5.0 (Open Multi-Processing) tus qauv, uas txhais cov API thiab cov txheej txheem rau kev siv cov txheej txheem sib luag ntawm cov tub ntxhais kawm ntau thiab hybrid (CPU + GPU / DSP) cov tshuab nrog kev nco thiab vectorization units (SIMD), muaj txuas ntxiv mus. Ntxiv kev txhawb nqa thawj zaug rau kev faib cov lus qhia thiab muaj peev xwm siv cov voj voog sib txawv hauv OpenMP tsim. Kev txhawb nqa rau OMP_TARGET_OFFLOAD ib puag ncig hloov pauv.
  • Kev siv ntawm OpenACC 2.6 parallel programming specifications muab rau C, C ++ thiab Fortran cov lus tau raug txhim kho, uas txhais cov cuab yeej rau offloading ua hauj lwm ntawm GPUs thiab tshwj xeeb processors, xws li NVIDIA PTX.
  • Rau cov lus C, tus cwj pwm tshiab "no_stack_protector" tau raug coj los siv, tsim los cim cov haujlwm uas yuav tsum tsis txhob qhib ("-fstack-protector"). Tus cwj pwm "malloc" tau nthuav dav los txhawb kev txheeb xyuas cov khub ntawm kev hu xov tooj rau kev faib thiab tso tawm lub cim xeeb (tus neeg faib khoom / tus neeg faib khoom), uas yog siv rau hauv qhov ntsuas zoo li qub txhawm rau txheeb xyuas qhov yuam kev hauv kev ua haujlwm nrog lub cim xeeb (kev nco xau, siv tom qab tso tawm, muab ob npaug rau hu rau dawb muaj nuj nqi, thiab lwm yam) thiab nyob rau hauv compiler ceeb toom "-Wmismatched-dealloc", "-Wmismatched-new-delete" thiab "-Wfree-nonheap-object", qhia txog kev tsis sib haum xeeb ntawm lub cim xeeb deallocation thiab nco kev faib ua haujlwm.
  • Cov lus ceeb toom tshiab tau ntxiv rau hom C:
    • "-Wmismatched-dealloc" (enabled los ntawm lub neej ntawd) - ceeb toom txog kev ua haujlwm ntawm lub cim xeeb deallocation uas siv lub pointer uas tsis sib xws nrog kev faib ua haujlwm nco.
    • "-Wsizeof-array-div" (enabled thaum "-Wall" yog teev) - ceeb toom txog kev faib ob qhov loj ntawm cov neeg ua haujlwm yog tias tus divisor tsis phim qhov loj ntawm lub caij array.
    • "-Wstringop-overread" (enabled los ntawm lub neej ntawd) - ceeb toom txog kev hu xov tooj rau txoj hlua uas nyeem cov ntaub ntawv los ntawm thaj chaw sab nraud ntawm array ciam teb.
    • "-Wtsan" (enabled los ntawm lub neej ntawd) - ceeb toom txog kev siv nta (xws li std:: atomic_thread_fence) uas tsis txaus siab hauv ThreadSanitizer.
    • "-Warray-parameter" thiab "-Wvla-parameter" (enabled thaum qhia "-Wall") - ceeb toom txog overriding functions nrog incompatible declarations of arguments txuam nrog taag- thiab txawv txawv-ntev arrays.
    • Cov lus ceeb toom "-Wuninitialized" tam sim no kuaj pom kev sim nyeem los ntawm uninitialized dynamically faib lub cim xeeb.
    • Cov lus ceeb toom "-Wfree-nonheap-object" nthuav dav lub ntsiab lus ntawm cov xwm txheej uas lub cim xeeb deallocation functions raug hu nrog tus pointer tsis tau txais los ntawm kev faib lub cim xeeb dynamic.
    • Cov lus ceeb toom "-Wmaybe-uninitialized" tau nthuav dav kev tshawb pom ntawm cov taw qhia hla mus rau cov haujlwm uas xa mus rau qhov chaw nco tsis tau pib.
  • Rau cov lus C, ib feem ntawm cov yam ntxwv tshiab tau tsim nyob rau hauv lub moj khaum ntawm C2X tus qauv tau siv (ua haujlwm los ntawm kev qhia meej -std = c2x thiab -std = gnu2x): macros BOOL_MAX thiab BOOL_WIDTH, xaiv qhov qhia txog cov npe ntawm cov tsis siv hauv kev ua haujlwm Cov lus txhais (raws li hauv C++), tus cwj pwm "[ [nodiscard]]", tus neeg teb xov tooj ua ntej "__has_c_attribute", macros FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_60559, NLT_XNUMX, SNAN, LDBL_SNAN, DEC_INFINITY thiab DEC_NAN, NaN = macro rau FloatN , _FloatNx thiab _DecimalN, muaj peev xwm txheeb xyuas cov cim dhia ua ntej tshaj tawm thiab thaum kawg ntawm cov lus sib xyaw.
  • Rau C ++, ib feem ntawm cov kev hloov pauv thiab kev tsim kho tshiab tau npaj tseg hauv C ++ 20 tus qauv tau raug coj los siv, suav nrog cov haujlwm virtual "consteval virtual", pseudo-destructors rau qhov kawg ntawm lub neej voj voog ntawm cov khoom, kev siv cov chav kawm enum thiab xam qhov loj ntawm ib qho array hauv qhov "tshiab" qhia.
  • Rau C ++, kev txhawb nqa kev sim tau ntxiv rau qee qhov kev txhim kho tau tsim rau yav tom ntej C ++ 23 tus qauv (-std = c ++ 23, -std = gnu ++ 23, -std = c ++ 2b, -std = gnu ++ 2 ib). Piv txwv li, tam sim no muaj kev txhawb nqa rau cov lus sau "zu" rau kos npe size_t qhov tseem ceeb.
  • libstdc ++ tau txhim kho kev txhawb nqa rau C ++ 17 tus qauv, suav nrog kev qhia txog std::from_chars thiab std::to_chars kev siv rau hom ntab ntab. Cov ntsiab lus tshiab ntawm C ++ 20 tus qauv tau ua tiav, suav nrog std::bit_cast, std::source_location, atomic operations tos thiab ceeb toom, , , , , nrog rau cov ntsiab lus ntawm yav tom ntej C ++ 23 tus qauv (std::to_underlying, std::is_scoped_enum). Ntxiv kev sim txhawb rau hom rau kev ua cov ntaub ntawv sib luag (SIMD, Cov Ntaub Ntawv-Parallel Hom). Kev siv std::uniform_int_distribution tau nrawm dua.
  • Tshem tawm tus chij alpha zoo los ntawm libgccjit, ib lub tsev qiv ntawv sib koom rau embedding code generator rau hauv lwm cov txheej txheem thiab siv nws los npaj JIT compilation ntawm bytecode rau hauv tshuab code. Ntxiv lub peev xwm los tsim libgccjit rau MinGW.
  • Ntxiv kev txhawb nqa rau AArch64 Armv8-R architecture (-march=armv8-r). Rau AArch64 thiab ARM architectures, kev txhawb nqa rau cov txheej txheem tau ntxiv (tsis-mcpu thiab -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) thiab Arm Neoverse N2 (neoverse-n2). Fujitsu A64FX (a64fx) thiab Arm Cortex-R82 (cortex-r82) CPUs kuj tau ntxiv, txhawb nqa tsuas yog AArch64 architecture.
  • Ntxiv kev txhawb nqa rau kev siv Armv8.3-a (AArch64 / AArch32), SVE (AArch64), SVE2 (AArch64) thiab MVE (AArch32 M-profile) SIMD cov lus qhia rau autovectorize cov haujlwm ua haujlwm ntxiv, rho tawm, sib npaug thiab sib txawv ntawm qhov sib ntxiv / rho tawm. cov zauv. Ntxiv kev txhawb nqa thawj zaug rau autovectorization rau ARM siv MVE cov lus qhia teeb.
  • Rau ARM platforms, tag nrho cov txheej txheem ntawm compiler-integrated C functions (Intrinsics) yog muab, hloov los ntawm txuas ntxiv vector cov lus qhia (SIMD), npog tag nrho NEON cov lus qhia sau tseg hauv ACLE Q3 2020 specification.
  • Kev them nyiaj yug rau gfx908 GPU tau ntxiv rau qhov backend rau tsim cov cai rau AMD GPUs raws li GCN microarchitecture.
  • Ntxiv kev txhawb nqa rau cov txheej txheem tshiab thiab cov txheej txheem qhia tshiab txuas ntxiv ua tiav hauv lawv:
    • Intel Sapphire Rapids (-march = sapphirerapids, pab txhawb rau MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-8NF16, AMX-INTLE, AMX-INTFXNUMX
    • Intel Alderlake (-march=alderlake, pab txhawb rau CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI thiab HRESET cov lus qhia).
    • Intel Rocketlake (-march = rocketlake, zoo ib yam li Rocket Lake tsis muaj kev txhawb nqa SGX).
    • AMD Zen 3 (-march=znver3).
  • Rau IA-32 / x86-64 systems raws li Intel processors, kev txhawb nqa rau cov lus qhia tshiab processor TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI tau ntxiv.
  • Ntxiv kev txhawb nqa rau "-march=x86-64-v[234]" chij los xaiv x86-64 qib architecture (v2 - npog SSE4.2, SSSE3, POPCNT thiab CMPXCHG16B txuas ntxiv; v3 - AVX2 thiab MOVBE; v4 - AVX-512 ) .
  • Ntxiv kev txhawb nqa rau RISC-V systems nrog loj-endian byte xaj. Ntxiv "-misa-spec=*" kev xaiv los xaiv cov version ntawm RISC-V kev qhia teeb tsa cov qauv tshwj xeeb. Ntxiv kev txhawb nqa rau Chaw Nyob Sanitizer thiab pawg tiv thaiv siv canary cim npe.
  • Kev txhim kho txuas ntxiv ntawm "-fanalyzer" hom kev tshuaj ntsuam zoo li qub, uas ua rau muaj kev cuam tshuam nrog kev sib koom ua ke ntawm kev ua tiav txoj hauv kev thiab cov ntaub ntawv ntws hauv qhov program. Cov hom muaj peev xwm txheeb xyuas cov teeb meem ntawm lub sijhawm muab tso ua ke, xws li ob npaug hu rau dawb () muaj nuj nqi rau ib qho chaw nco, cov ntaub ntawv piav qhia txog kev xau, dereferencing thiab dhau cov pointers null, nkag mus rau cov cim xeeb pub dawb, siv cov nqi tsis tsim nyog, thiab lwm yam. Hauv qhov tshiab version:
    • Cov cai rau kev taug qab qhov kev zov me nyuam lub xeev tau raug sau rov qab tag nrho. Teeb meem nrog scanning C cov ntaub ntawv loj heev tau raug daws.
    • Ntxiv kev txhawb nqa C++ thawj zaug.
    • Kev faib kev nco thiab kev txheeb xyuas qhov kev txheeb xyuas tau raug nthuav tawm los ntawm cov khoom lag luam tshwj xeeb thiab cov haujlwm pub dawb, thiab tam sim no txhawb nqa tshiab / rho tawm thiab tshiab[] / rho tawm[].
    • Ntxiv cov lus ceeb toom tshiab: -Wanalyzer-hloov- suav-tsis zoo, -Wanalyzer-hloov- suav-overflow, -Wanalyzer-sau-rau-const thiab -Wanalyzer-sau-rau- hlua-literal.
    • Ntxiv cov kev xaiv debugging tshiab -fdump-analyzer-json thiab -fno-analyzer-feasibility.
    • Lub peev xwm los txuas ntxiv lub ntsuas ntsuas los ntawm plugins rau GCC tau raug coj los siv (piv txwv li, lub plugin tau npaj los kuaj xyuas qhov kev siv tsis raug ntawm kev kaw thoob ntiaj teb (GIL) hauv CPython).

Tau qhov twg los: opennet.ru

Ntxiv ib saib