Ħruġ tas-suite tal-kompilaturi GCC 11

Wara sena ta 'żvilupp, ġiet rilaxxata s-suite tal-kompilaturi b'xejn GCC 11.1, l-ewwel rilaxx sinifikanti fil-fergħa l-ġdida tal-GCC 11.x. Skont l-iskema l-ġdida ta 'numerazzjoni ta' rilaxx, il-verżjoni 11.0 intużat fil-proċess ta 'żvilupp, u ftit qabel ir-rilaxx ta' GCC 11.1, il-fergħa GCC 12.0 kienet diġà ramifikata, li minnha tkun iffurmata r-rilaxx maġġuri li jmiss, GCC 12.1.

GCC 11.1 huwa notevoli għat-tranżizzjoni tiegħu biex juża l-format tal-fajl tad-debug DWARF 5 awtomatikament, l-inklużjoni awtomatika tal-istandard C++17 ("-std=gnu++17"), titjib sinifikanti fl-appoġġ għas-C++20 standard, appoġġ sperimentali għal C++23, titjib relatat mal-istandard futur tal-lingwa C (C2x), ottimizzazzjonijiet ġodda tal-prestazzjoni.

Bidliet ewlenin:

  • Il-mod default għal-lingwa C++ inbidel biex juża l-istandard C++17 (-std=gnu++17) minflok is-C++14 offrut qabel. Huwa possibbli li l-imġieba l-ġdida C++17 tiġi ddiżattivata b'mod selettiv meta jiġu pproċessati mudelli li jużaw mudelli oħra bħala parametru (-fno-new-ttp-matching).
  • Appoġġ miżjud għall-aċċelerazzjoni tal-ħardwer tal-għodda AddressSanitizer, li tippermettilek tiddetermina l-fatti ta 'aċċess għal żoni ta' memorja meħlusa, li tmur lil hinn mill-konfini tal-buffer allokat, u xi tipi oħra ta 'żbalji meta taħdem bil-memorja. L-aċċelerazzjoni tal-ħardwer bħalissa hija disponibbli biss għall-arkitettura AArch64 u hija ffukata fuq l-użu meta tikkompila l-kernel tal-Linux. Biex tiġi attivata l-aċċelerazzjoni tal-ħardwer AddressSanitizer meta jinbnew komponenti tal-ispazju tal-utent, il-bandiera "-fsanitize=hwaddress" ġiet miżjuda, u l-bandiera tal-kernel "-fsanitize=kernel-hwaddress".
  • Meta tiġġenera informazzjoni ta 'debugging, il-format DWARF 5 jintuża awtomatikament, li, meta mqabbel mal-verżjonijiet preċedenti, jippermetti li tiġġenera 25% aktar data ta' debugging kompatta. L-appoġġ sħiħ għal DWARF 5 jeħtieġ mill-inqas binutils verżjoni 2.35.2. Il-format DWARF 5 huwa appoġġjat fl-għodod tad-debugging peress GDB 8.0, valgrind 3.17.0, elfutils 0.172 u dwz 0.14. Biex tiġġenera fajls debug billi tuża verżjonijiet oħra ta 'DWARF, tista' tuża l-għażliet "-gdwarf-2", "-gdwarf-3" u "-gdwarf-4".
  • Ir-rekwiżiti għall-kompilaturi li jistgħu jintużaw għall-bini tal-GCC żdiedu. Il-kompilatur issa għandu jappoġġa l-istandard C++11 (preċedentement kien meħtieġ C++98), i.e. Jekk GCC 10 kien biżżejjed biex jinbena GCC 3.4, allura mill-inqas GCC 11 issa huwa meħtieġ biex jinbena GCC 4.8.
  • L-isem u l-post tal-fajls għall-iffrankar ta 'miżbliet, fajls temporanji u informazzjoni addizzjonali meħtieġa għall-ottimizzazzjoni LTO ġew mibdula. Fajls bħal dawn issa huma dejjem issejvjati fid-direttorju attwali sakemm il-mogħdija ma tinbidelx b'mod espliċitu permezz tal-għażliet "-dumpbase", "-dumpdir" u "-save-temps="*".
  • L-appoġġ għall-format binarju BRIG għall-użu mal-lingwa HSAIL (Eterogeneous System Architecture Intermediate Language) ġie deprekat u dalwaqt se jitneħħa.
  • Il-kapaċitajiet tal-mod ThreadSanitizer (-fsanitize=thread) ġew estiżi, iddisinjati biex jiskopru kundizzjonijiet tar-razza meta jaqsmu l-istess dejta minn ħjut differenti ta 'applikazzjoni b'ħafna ħajt. Ir-rilaxx il-ġdid iżid appoġġ għal runtimes u ambjenti alternattivi, kif ukoll appoġġ għall-għodda ta 'debugging KCSAN (Kernel Concurrency Sanitizer), iddisinjata biex tiskopri b'mod dinamiku l-kundizzjonijiet tar-razza fil-qalba tal-Linux. Miżjud għażliet ġodda "-param tsan-distinguish-volatile" u "-param tsan-instrument-func-entry-exit".
  • In-numri tal-kolonni f'messaġġi dijanjostiċi issa jirriflettu mhux l-għadd tal-byte mill-bidu tal-linja, iżda fil-fatt in-numri tal-kolonna li jqisu karattri b'ħafna byte u karattri li jokkupaw diversi pożizzjonijiet fil-linja (pereżempju, il-karattru 🙂 jokkupa żewġ pożizzjonijiet u hija kodifikata f'4 bytes). Bl-istess mod, il-karattri tat-tab issa huma ttrattati bħala ċertu numru ta 'spazji (konfigurabbli permezz tal-għażla -ftabstop, default 8). Biex tirrestawra l-imġiba l-antika, hija proposta l-għażla "-fdiagnostics-column-unit=byte", u biex jiġi ddeterminat il-valur inizjali (numerazzjoni minn 0 jew 1) - l-għażla "-fdiagnostics-column-origin=".
  • Il-vectorizer jieħu kont tal-kontenut kollu tal-funzjoni u jżid kapaċitajiet ta 'proċessar assoċjati ma' intersezzjonijiet u referenzi għal blokki preċedenti fil-graff tal-fluss tal-kontroll (CFG, graff tal-fluss tal-kontroll).
  • L-ottimizzatur jimplimenta l-abbiltà li jikkonverti serje ta 'operazzjonijiet kondizzjonali li jqabblu l-istess varjabbli f'espressjoni ta' swiċċ. L-espressjoni tal-iswiċċ tista 'aktar tard tiġi kodifikata bl-użu ta' struzzjonijiet tal-ittestjar tal-bit (l-għażla "-fbit-tests" ġiet miżjuda biex tikkontrolla tali konverżjoni).
  • Ottimizzazzjonijiet interproċedurali mtejba. Miżjud pass ġdid tal-IPA-modref (-fipa-modref) biex jintraċċa l-effetti sekondarji meta jsejjaħ funzjonijiet u jtejjeb l-eżattezza tal-analiżi. Implimentazzjoni mtejba tal-pass IPA-ICF (-fipa-icf), li tnaqqas il-konsum tal-memorja waqt il-kumpilazzjoni u żżid in-numru ta 'funzjonijiet unifikati li għalihom huma kkombinati blokki identiċi ta' kodiċi. Fil-pass tal-IPA-CP (Propagazzjoni kostanti Interproċedurali), l-euristiċi tat-tbassir ġew imtejba, b'kont meħud tal-konfini magħrufa u l-karatteristiċi tal-linji.
  • Fil Linking Time Optimizations (LTO), il-format tal-bytecode huwa ottimizzat biex inaqqas id-daqs u jtejjeb il-veloċità tal-ipproċessar. L-ogħla konsum tal-memorja mnaqqas matul il-fażi tal-irbit.
  • Fil-mekkaniżmu ta 'ottimizzazzjoni bbażat fuq ir-riżultati tal-profiling tal-kodiċi (PGO - Profile-guided optimization), li jippermetti li jiġġenera kodiċi aktar ottimali bbażat fuq analiżi tal-karatteristiċi ta' eżekuzzjoni, id-daqs tal-fajls b'dejta GCOV jitnaqqas minħabba ippakkjar aktar kompatt ta 'żero counters . Modalità "-fprofile-values" imtejba billi żżomm rekord ta 'aktar parametri fuq sejħiet indiretti.
  • L-implimentazzjoni tal-istandard OpenMP 5.0 (Open Multi-Processing), li jiddefinixxi l-API u l-metodi għall-applikazzjoni ta’ metodi ta’ programmazzjoni parallela fuq sistemi multi-core u ibridi (CPU + GPU/DSP) b’unitajiet ta’ memorja u vettorizzazzjoni kondiviża (SIMD), għandha kompliet. Żid l-appoġġ inizjali għad-direttiva tal-allokazzjoni u l-abbiltà li tuża loops eteroġenji fil-kostruzzjonijiet OpenMP. Appoġġ implimentat għall-varjabbli ambjentali OMP_TARGET_OFFLOAD.
  • L-implimentazzjoni tal-ispeċifikazzjoni tal-ipprogrammar parallel OpenACC 2.6 ipprovduta għal-lingwi C, C++ u Fortran ġiet imtejba, li tiddefinixxi għodod għall-operazzjonijiet ta 'ħatt fuq GPUs u proċessuri speċjalizzati, bħal NVIDIA PTX.
  • Għal-lingwi C, ġie implimentat attribut ġdid "no_stack_protector", iddisinjat biex jimmarka funzjonijiet li għalihom il-protezzjoni tal-munzell m'għandhiex tkun attivata ("-fstack-protector"). L-attribut "malloc" ġie estiż biex jappoġġja l-identifikazzjoni ta 'pari ta' sejħiet għall-allokazzjoni u l-ħelsien tal-memorja (allokatur/deallokator), li jintuża fl-analizzatur statiku biex jidentifika żbalji tipiċi fil-ħidma mal-memorja (tnixxijiet tal-memorja, użu wara l-ħelsien, sejħiet doppji għall-funzjoni ħielsa, eċċ.) u fit-twissijiet tal-kompilatur “-Wmismatched-dealloc”, “-Wmismatched-new-delete” u “-Wfree-nonheap-object”, li jinfurmaw dwar inkonsistenza bejn id-diżallokazzjoni tal-memorja u l-operazzjonijiet tal-allokazzjoni tal-memorja.
  • Twissijiet ġodda ġew miżjuda għal-lingwa C:
    • "-Wmismatched-dealloc" (attivat b'mod awtomatiku) - iwissi dwar operazzjonijiet ta' deallocation tal-memorja li jużaw pointer li mhux kompatibbli mal-funzjonijiet tal-allokazzjoni tal-memorja.
    • "-Wsizeof-array-div" (attivata meta "-Wall" hija speċifikata) - Iwissi dwar id-diviżjoni ta' żewġ sizeof-operaturi jekk id-diviżur ma jaqbilx mad-daqs tal-element array.
    • "-Wstringop-overread" (attivat b'mod awtomatiku) - iwissi dwar is-sejħa ta' funzjoni ta' string li taqra data minn żona barra l-konfini tal-firxa.
    • "-Wtsan" (attivat b'mod awtomatiku) - Iwissi dwar l-użu ta' karatteristiċi (bħal std::atomic_thread_fence) li mhumiex appoġġjati f'ThreadSanitizer.
    • “-Warray-parameter” u “-Wvla-parameter” (attivati ​​meta tispeċifika “-Wall”) - iwissi dwar funzjonijiet li jipprevalu b’dikjarazzjonijiet inkompatibbli ta’ argumenti assoċjati ma’ arrays ta’ tul fiss u varjabbli.
    • It-twissija "-Wuninitialized" issa tiskopri tentattivi biex taqra minn memorja allokata dinamikament mhux inizjali.
    • It-twissija "-Wfree-nonheap-object" tespandi d-definizzjoni ta 'każijiet fejn il-funzjonijiet ta' deallokazzjoni tal-memorja jissejħu b'pointer mhux miksub permezz ta 'funzjonijiet ta' allokazzjoni ta 'memorja dinamika.
    • It-twissija "-Wmaybe-uninitialized" espandiet l-iskoperta tal-mogħdija ta' indikaturi għal funzjonijiet li jirreferu għal postijiet tal-memorja mhux inizjalizzati.
  • Għal-lingwa C, ġiet implimentata porzjon ta' karatteristiċi ġodda żviluppati fil-qafas tal-istandard C2X (attivata billi jiġu speċifikati -std=c2x u -std=gnu2x): macros BOOL_MAX u BOOL_WIDTH, indikazzjoni fakultattiva ta' ismijiet ta' parametri mhux użati fil-funzjoni definizzjonijiet (bħal fis-C++), attribut "[ [nodiscard]]", operatur tal-preproċessur "__has_c_attribute", macros FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_60559, __STDC_WANT_IEC_XNUMX, DSN_BLTSN___, DBL_IS_IEC_XNUMX, DBL_IS_IEC_XNUMX AN, DEC_INFINITY u DEC _NAN, NaN=makros għal FloatN, _FloatNx u _DecimalN, abbiltà li jispeċifikaw il-marki tal-qabża qabel id-dikjarazzjonijiet u fl-aħħar tad-dikjarazzjonijiet komposti.
  • Għal C++, ġiet implimentata porzjon tal-bidliet u l-innovazzjonijiet proposti fl-istandard C++20, inklużi funzjonijiet virtwali "consteval virtwali", psewdo-distrutturi għat-tmiem taċ-ċiklu tal-ħajja tal-oġġetti, l-użu tal-klassi enum u kalkolu tad-daqs ta 'firxa fl-espressjoni "ġdida".
  • Għal C++, ġie miżjud appoġġ sperimentali għal xi titjib li qed jiġi żviluppat għall-istandard futur C++23 (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). Pereżempju, issa hemm appoġġ għas-suffiss letterali “zu” għal valuri size_t iffirmati.
  • libstdc++ tejbet l-appoġġ għall-istandard C++17, inkluża l-introduzzjoni ta 'implimentazzjonijiet std::from_chars u std::to_chars għal tipi ta' punt li jvarja. Implimentaw elementi ġodda tal-istandard C++20, inklużi std::bit_cast, std::source_location, operazzjonijiet atomiċi stenna u notifika, , , , , kif ukoll elementi tal- futur C++ standard 23 (std::to_underlying, std::is_scoped_enum). Miżjud appoġġ sperimentali għal tipi għall-ipproċessar tad-data parallel (SIMD, Tipi Parallel tad-Data). L-implimentazzjoni ta' std::uniform_int_distribution ġiet aċċellerata.
  • Neħħa l-bandiera tal-kwalità alfa minn libgccjit, librerija kondiviża għall-inkorporazzjoni ta 'ġeneratur tal-kodiċi fi proċessi oħra u tużaha biex torganizza l-kumpilazzjoni JIT ta' bytecode f'kodiċi tal-magni. Żid il-ħila li tibni libgccjit għal MinGW.
  • Appoġġ miżjud għall-arkitettura AArch64 Armv8-R (-march=armv8-r). Għall-arkitetturi AArch64 u ARM, ġie miżjud appoġġ għall-proċessuri (parametri -mcpu u -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) u Arm Neoverse N2 (neoverse-n2). Ġew miżjuda wkoll CPUs Fujitsu A64FX (a64fx) u Arm Cortex-R82 (cortex-r82), li jappoġġjaw biss l-arkitettura AArch64.
  • Appoġġ miżjud għall-użu ta 'struzzjonijiet SIMD Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) u MVE (AArch32 M-profile) biex awtovectorize operazzjonijiet li jwettqu żieda, tnaqqis, multiplikazzjoni u varjanti ta' żieda/tnaqqis fuq numri kumplessi. Miżjud appoġġ inizjali għal awtovettorizzazzjoni għal ARM bl-użu tas-sett ta 'struzzjonijiet MVE.
  • Għal pjattaformi ARM, huwa pprovdut sett sħiħ ta 'funzjonijiet C integrati fil-kompilatur (Intrinsics), sostitwiti minn struzzjonijiet vettorjali estiżi (SIMD), li jkopru l-istruzzjonijiet NEON kollha dokumentati fl-ispeċifikazzjoni ACLE Q3 2020.
  • L-appoġġ għall-GPU gfx908 ġie miżjud mal-backend għall-ġenerazzjoni tal-kodiċi għall-GPUs AMD ibbażati fuq il-mikroarkitettura GCN.
  • Appoġġ miżjud għal proċessuri ġodda u estensjonijiet ta' sett ta' struzzjonijiet ġodda implimentati fihom:
    • Intel Sapphire Rapids (-march=sapphirerapids, jippermetti appoġġ għall-MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT8, AMX-BV16NI u istruzzjonijiet AVX-BVXNUMXN.
    • Intel Alderlake (-march=alderlake, jippermetti appoġġ għall-istruzzjonijiet CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI u HRESET).
    • Intel Rocketlake (-march=rocketlake, simili għal Rocket Lake mingħajr appoġġ SGX).
    • AMD Zen 3 (-march=znver3).
  • Għal sistemi IA-32/x86-64 ibbażati fuq proċessuri Intel, ġie miżjud appoġġ għal struzzjonijiet ġodda tal-proċessur TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI.
  • Appoġġ miżjud għall-bnadar "-march=x86-64-v[234]" biex jintgħażlu livelli ta' arkitettura x86-64 (v2 - tkopri estensjonijiet SSE4.2, SSSE3, POPCNT u CMPXCHG16B; v3 - AVX2 u MOVBE; v4 - AVX-512 ).
  • Appoġġ miżjud għal sistemi RISC-V b'ordni ta 'byte big-endian. Miżjud għażla "-misa-spec="*" biex tagħżel il-verżjoni tal-ispeċifikazzjoni tal-arkitettura tas-sett tal-istruzzjonijiet RISC-V. Żid l-appoġġ għall-AddressSanitizer u l-protezzjoni tal-munzell bl-użu ta’ tikketti tal-kanarji.
  • Titjib kontinwu tal-modalità ta 'analiżi statika "-fanalyzer", li twettaq analiżi interproċedurali intensiva fir-riżorsi tal-mogħdijiet ta' eżekuzzjoni tal-kodiċi u l-flussi tad-dejta fil-programm. Il-mod huwa kapaċi li jiskopri problemi fl-istadju tal-kumpilazzjoni, bħal sejħiet doppji għall-funzjoni ħielsa () għal żona waħda tal-memorja, tnixxijiet tad-deskritturi tal-fajls, dereferencing u tgħaddi pointers nulli, aċċess għal blokki tal-memorja meħlusa, użu ta 'valuri mhux inizjalizzati, eċċ. Fil-verżjoni l-ġdida:
    • Il-kodiċi għat-traċċar tal-istat tal-programm ġie kompletament miktub mill-ġdid. Ġew solvuti problemi bl-iskannjar ta' fajls C kbar ħafna.
    • Miżjud appoġġ inizjali C++.
    • L-allokazzjoni tal-memorja u l-analiżi tad-diżallokazzjoni ġiet astratta mill-funzjonijiet speċifiċi malloc u ħielsa, u issa tappoġġja new/delete u new[]/delete[].
    • Miżjud twissijiet ġodda: -Wanalyzer-shift-count-negattiv, -Wanalyzer-shift-count-overflow, -Wanalyzer-write-to-const u -Wanalyzer-write-to-string-literal.
    • Miżjud għażliet ġodda ta' debugging -fdump-analyzer-json u -fno-analyzer-feasibility.
    • Ġiet implimentata l-abbiltà li testendi l-analizzatur permezz ta’ plugins għal GCC (pereżempju, ġie ppreparat plugin biex jiċċekkja l-użu ħażin ta’ qfil globali (GIL) f’CPython).

Sors: opennet.ru

Żid kumment