Rhyddhau cyfres casglwyr GCC 9

Ar ôl blwyddyn o ddatblygiad cyhoeddi rhyddhau set am ddim o gasglwyr GCC 9.1, y datganiad mawr cyntaf yn y gangen 9.x GCC newydd. Yn unol â cynllun newydd niferoedd rhyddhau, defnyddiwyd fersiwn 9.0 yn y broses ddatblygu, ac yn fuan cyn rhyddhau GCC 9.1, roedd cangen GCC 10.0 eisoes wedi dod i ben, ac ar y sail y byddai'r datganiad sylweddol nesaf, GCC 10.1, yn cael ei ffurfio.

Mae GCC 9.1 yn nodedig am sefydlogi cefnogaeth ar gyfer safon C ++17, gan barhau i weithredu galluoedd safon C++20 yn y dyfodol (wedi'i enwi'n god C ++2a), cynnwys yn y blaen ar gyfer yr iaith D, cefnogaeth rannol i OpenMP 5.0 , cefnogaeth bron yn gyflawn ar gyfer OpenACC 2.5, cynyddu scalability optimeiddiadau rhyng-weithdrefnol a optimizations yn y cam rhwymo, ehangu offer diagnostig ac ychwanegu rhybuddion newydd, backends ar gyfer OpenRISC, C-SKY V2 ac AMD GCN GPU.

Y prif newidiadau:

  • Cefnogaeth ychwanegol i'r iaith raglennu D. Mae GCC yn cynnwys frontend gyda chasglydd GDC (Gnu D Compiler) a llyfrgelloedd amser rhedeg (libphobos), sy'n eich galluogi i ddefnyddio GCC safonol i adeiladu rhaglenni yn yr iaith raglennu D. Y broses o alluogi cymorth iaith D yn GCC wedi cychwyn yn ôl yn 2011, ond llusgo ymlaen oherwydd yr angen i ddod â'r cod i gydymffurfio â gofynion GCC a phroblemau gyda throsglwyddo hawliau eiddo deallusol i Digital Mars, sy'n datblygu iaith raglennu D;
  • Mae gwelliannau wedi'u gwneud i'r generadur cod. Er enghraifft, mae'r defnydd o wahanol strategaethau ar gyfer ehangu mynegiadau Switch (tabl naid, prawf didau, coeden benderfynu) yn dibynnu ar sefyllfaoedd wedi'i roi ar waith. Ychwanegwyd y gallu i drawsnewid swyddogaethau llinol sy'n cynnwys mynegiant Switch gan ddefnyddio'r optimeiddio “-ftree-switch-conversion” (er enghraifft, set o amodau fel “achos 2: sut = 205; toriad; achos 3: sut = 305; toriad ;" yn cael ei drosi i "100 * sut + 5";
  • Gwell optimeiddiadau rhyng-weithdrefnol. Mae gosodiadau defnyddio mewnol wedi'u haddasu ar gyfer cronfeydd cod C++ modern a'u hehangu gyda pharamedrau newydd max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-think-insns and aninlined -thunk-amser. Gwell cywirdeb ac ymosodol o ran gwahanu cod oer/poeth. Gwell scalability ar gyfer mawr iawn unedau cyfieithu (er enghraifft, wrth gymhwyso optimeiddio yn y cam cysylltu â rhaglenni mawr);
  • Mae'r mecanwaith optimeiddio sy'n seiliedig ar ganlyniadau proffilio cod (PGO - Optimization dan arweiniad Proffil) wedi'i wella, sy'n cynhyrchu cod mwy optimaidd yn seiliedig ar ddadansoddiad o nodweddion gweithredu cod. opsiwn crynodeb"-fprofile-defnydd" bellach yn cynnwys y moddau optimeiddio "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" a "-ftree-loop-distribution". Dileu cynnwys histogramau gyda chownteri mewn ffeiliau, a oedd yn lleihau maint y ffeiliau â phroffiliau (mae histogramau bellach yn cael eu cynhyrchu ar y hedfan wrth berfformio optimeiddio wrth gysylltu);
  • Gwell Optimeiddio Amser Cysylltu (LTO). Darparwyd symleiddio mathau cyn cynhyrchu'r canlyniad, a oedd yn ei gwneud hi'n bosibl lleihau maint ffeiliau gwrthrych LTO yn sylweddol, lleihau'r defnydd o gof yn y cam rhwymo, a gwella cyfochrogiad gweithrediadau. Mae nifer y rhaniadau (-param lto-partitions) wedi'i gynyddu o 32 i 128, sy'n gwella perfformiad ar systemau gyda nifer fawr o edafedd CPU. Mae paramedr wedi'i ychwanegu i reoli nifer y prosesau optimizer
    "-param lto-max-streaming-parallelism";

    O ganlyniad, o gymharu â GCC 8.3, yr optimeiddiadau a gyflwynwyd yn GCC 9 a ganiateir lleihau amser llunio Firefox 5 a LibreOffice 66 tua 6.2.3%. Gostyngodd maint y ffeiliau gwrthrych gan 7%. Gostyngodd yr amser rhwymo ar CPU 8-craidd 11%. Mae cam optimeiddio dilyniannol y cam cysylltu bellach 28% yn gyflymach ac yn defnyddio 20% yn llai o gof. Gostyngodd defnydd cof pob prosesydd o gam parallelized LTO 30%;

  • Gweithredir y rhan fwyaf o'r fanyleb rhaglennu gyfochrog ar gyfer ieithoedd C, C++ a Fortran OpenACC 2.5, sy'n diffinio offer ar gyfer dadlwytho gweithrediadau ar GPUs a phroseswyr arbenigol megis NVIDIA PTX;
  • Mae cefnogaeth rannol i'r safon wedi'i gweithredu ar gyfer C a C++ Agor MP 5.0 (Aml-Brosesu Agored), sy'n diffinio'r API a dulliau o gymhwyso dulliau rhaglennu cyfochrog ar gyfer ieithoedd C, C++ a Fortran ar systemau aml-graidd a hybrid (CPU+GPU/DSP) gydag unedau cof a fectoreiddio a rennir (SIMD) ;
  • Mae rhybuddion newydd wedi'u hychwanegu ar gyfer yr iaith C: "-Waddress-of-packed-aelod" (gwerth pwyntydd heb ei alinio i aelod llawn dop o strwythur neu undeb) a
    «-Wabsolute-gwerth" (wrth gyrchu ffwythiannau ar gyfer cyfrifo gwerth absoliwt, os oes ffwythiant mwy addas ar gyfer y ddadl benodedig, er enghraifft, dylid defnyddio fabs(3.14) yn lle abs(3.14). Rhybuddion newydd wedi'u hychwanegu ar gyfer C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" a "-Wclass-conversion". Mae llawer o rybuddion a oedd ar gael yn flaenorol wedi'u hehangu;

  • Ychwanegwyd cefnogaeth arbrofol ar gyfer rhan o safon iaith C yn y dyfodol, gyda'r enw cod C2x. I alluogi cefnogaeth C2x, defnyddiwch yr opsiynau "-std=c2x" a "-std=gnu2x" (i alluogi estyniadau GNU). Megis dechrau datblygu y mae'r safon o hyd, felly, o'i alluoedd, dim ond y mynegiad _Static_assert ag un ddadl sy'n cael ei gefnogi (_Static_assert gyda dwy ddadl sydd wedi'i safoni yn C11);
  • Mae cefnogaeth i safon C ++17 wedi'i ddatgan yn sefydlog. Yn y blaen, mae galluoedd iaith C++17 wedi'u gweithredu'n llawn, ac yn libstdc++, mae'r swyddogaethau llyfrgell a ddiffinnir yn y safon yn agos at weithrediad llawn;
  • Parhad gweithredu elfennau o safon C++2a yn y dyfodol. Er enghraifft, ychwanegwyd y gallu i gynnwys ystodau yn ystod y cychwyn, mae estyniadau ar gyfer mynegiadau lambda wedi'u rhoi ar waith, mae cefnogaeth i aelodau gwag o strwythurau data a phriodoleddau tebygol/annhebygol wedi'i ychwanegu, darparwyd y gallu i alw swyddogaethau rhithwir mewn ymadroddion amodol. , etc.
    I alluogi cefnogaeth C++2a, defnyddiwch yr opsiynau "-std=c++2a" a "-std=gnu++2a". Ychwanegwyd ffeiliau pennyn did a fersiwn i libstdc++ ar gyfer C++2a, std::remove_cvref, std:: unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible a std:: nodweddion type_identity, std :: midlerp functions : , std::bind_front,
    std::visit, std::is_constant_evaluated a std:: assume_aligned, ychwanegwyd cefnogaeth ar gyfer y math char8_t, gweithredwyd y gallu i wirio rhagddodiad ac ôl-ddodiad llinynnau (starts_with, ends_with);

  • Cefnogaeth ychwanegol i broseswyr ARM newydd
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE a Neoverse N1. Cefnogaeth ychwanegol ar gyfer cyfarwyddiadau a gyflwynwyd yn Armv8.3-A ar gyfer gweithio gyda rhifau cymhlyg, cynhyrchu rhifau ffug-hap (rng) a thagio cof (memtag), yn ogystal â chyfarwyddiadau ar gyfer atal ymosodiadau sy'n ymwneud â gweithredu hapfasnachol a gweithrediad uned ragfynegi'r gangen . Ar gyfer pensaernïaeth AArch64, mae modd amddiffyn wedi'i ychwanegu croestoriadau o simnai a pentwr (“-fstack-clash-protection”). I ddefnyddio nodweddion pensaernïaeth Armv8.5-A, mae'r opsiwn "-march=armv8.5-a" wedi'i ychwanegu

  • Mae'n cynnwys backend ar gyfer cynhyrchu cod ar gyfer GPUs AMD yn seiliedig ar ficrosaernïaeth GCN. Mae'r gweithrediad wedi'i gyfyngu ar hyn o bryd i lunio cymwysiadau un edau (bydd cymorth ar gyfer gwneud cyfrifiadau aml-edau trwy OpenMP ac OpenACC yn cael ei gynnig yn ddiweddarach) a chefnogaeth ar gyfer GPU Fiji a Vega 10;
  • Ychwanegwyd backend newydd ar gyfer proseswyr AgoredRISC;
  • Ychwanegwyd ôl-ben ar gyfer proseswyr C-SKY V2, a gynhyrchwyd gan y cwmni Tseiniaidd o'r un enw ar gyfer dyfeisiau defnyddwyr amrywiol;
  • Mae'r holl opsiynau llinell orchymyn sy'n gweithredu gwerthoedd beit yn cefnogi'r ôl-ddodiaid kb, KiB, MB, MiB, GB a GiB;
  • Gweithredwyd mae'r opsiwn “-flive-patching=[inline-only-static|inline-clone]” yn caniatáu ichi lunio systemau clytio byw yn ddiogel oherwydd rheolaeth aml-lefel dros y defnydd o ryngweithdrefnol (Cwrw Gwelw India) optimeiddio;
  • Ychwanegwyd "--cwblhau" opsiwn ar gyfer rheoli dirwy-grained cwblhau opsiwn wrth ddefnyddio bash;
  • Mae'r offer diagnostig yn darparu arddangosfeydd o ddetholiadau testun ffynhonnell sy'n nodi rhif y llinell a gwybodaeth sy'n gysylltiedig â marcio gweledol, megis mathau o operand. I analluogi arddangos rhifau llinell a labeli, darperir yr opsiynau “-fno-diagnostics-show-line-numbers” a “-fno-diagnostics-show-labels”;

    Rhyddhau cyfres casglwyr GCC 9

  • Ehangwyd offer ar gyfer gwneud diagnosis o wallau yn y cod C++, gwell darllenadwyedd gwybodaeth am achosion gwallau ac amlygu paramedrau problemus;

    Rhyddhau cyfres casglwyr GCC 9

  • Ychwanegwyd opsiwn “-fdiagnostics-format=json”, sy'n caniatáu cynhyrchu allbwn diagnostig mewn fformat y gall peiriant ei ddarllen (JSON);
  • Ychwanegwyd opsiynau proffilio newydd “-fprofile-filter-files” a “-fprofile-exclude-files” i ddewis ffeiliau ffynhonnell i'w prosesu;
  • Mae AddressSanitizer yn darparu cenhedlaeth o god dilysu mwy cryno ar gyfer newidynnau awtomatig, sy'n lleihau defnydd cof y ffeil gweithredadwy sy'n cael ei gwirio;
  • Gwell allbwn yn "-fopt-gwybodaeth» (gwybodaeth fanwl am optimeiddio ychwanegol). Ychwanegwyd rhagddodiaid newydd "optimized" a "methu", yn ogystal â'r rhagddodiad "nodyn" a oedd ar gael yn flaenorol. Allbwn ychwanegol o wybodaeth am wneud penderfyniadau ar fewn-ddatblygiad a fectoreiddio cylchoedd;
  • Wedi ychwanegu'r opsiwn “-fsave-optimization-record”, pan fydd wedi'i nodi, mae GCC yn arbed y ffeil SRCFILE.opt-record.json.gz gyda disgrifiad o benderfyniadau ar ddefnyddio rhai optimeiddio. Mae'r opsiwn newydd yn wahanol i'r modd “-fopt-info” trwy gynnwys metadata ychwanegol, megis gwybodaeth am y proffil a'r cadwyni mewnol;
  • Ychwanegwyd opsiynau “-fipa-stack-alignment” a “-fipa-reference-addressable” i reoli aliniad stac a defnyddio moddau mynd i'r afael (ysgrifennu yn unig neu ddarllen-union) ar gyfer newidynnau statig yn ystod optimeiddiadau rhyng-weithdrefnol;
  • Cyflwynir swyddogaethau adeiledig newydd i reoli rhwymo priodoleddau yn ogystal ag ymddygiad sy'n gysylltiedig â rhagfynegi cangen a gweithredu cyfarwyddiadau hapfasnachol: "__builtin_has_priodedd«,«__builtin_disgwyl_gyda_tebygolrwydd" A "__builtin_dyfaliad_safe_value" . Mae priodoledd newydd wedi'i ychwanegu ar gyfer swyddogaethau, newidynnau a mathau copïo;
  • Mae cefnogaeth lawn i fewnbwn/allbwn asyncronaidd wedi'i weithredu ar gyfer yr iaith Fortran;
  • Mae cefnogaeth i lwyfannau Solaris 10 (*-*-solaris2.10) a Cell/BE (SPU Injan Band Eang Cell) wedi'i anghymeradwyo a bydd yn cael ei ddileu yn y datganiad mawr nesaf. Mae cefnogaeth i bensaernïaeth Armv2, Armv3, Armv5 ac Armv5E wedi dod i ben. Mae cefnogaeth i Intel MPX (Estyniadau Diogelu Cof) wedi dod i ben.

Ffynhonnell: opennet.ru

Ychwanegu sylw