Rakirina komîteya berhevkerê GCC 10

Piştî salek pêşveçûn weşandin serbestberdana komek belaş a berhevkeran GCC 10.1, yekem serbestberdana mezin di şaxa nû ya GCC 10.x de. Li gorî plana nû hejmarên berdanê, guhertoya 10.0 di pêvajoya pêşkeftinê de hate bikar anîn, û demek kin berî serbestberdana GCC 10.1, şaxê GCC 11.0 berê xwe dabû şax, li ser bingeha ku dê serbestberdana girîng a din, GCC 11.1, were damezrandin.

GCC 10.1 ji bo pêkanîna gelek nûbûnên di zimanê C++ de ku ji bo standarda C++20-ê hatî pêşve xistin, çêtirkirinên bi standarda zimanê C ya pêşerojê (C2x), xweşbîniyên nû yên di paşpirtikên berhevkerê de û piştgiriya ceribandinê de girîng e. moda analîza statîk. Wekî din, di dema amadekirina şaxek nû de, projeyê depo ji SVN veguhezand Git.

sereke guhertin:

  • Zêde kirin şêwaza ceribandinê ya analîza statîk "-fanalîzator", ku di bernameyekê de analîza navbirî-çavkaniyê-dijwar a rêyên pêkanîna kodê û herikîna daneyan pêk tîne. Mode dikare di qonaxa berhevkirinê de pirsgirêkan teşhîs bike, wek bangên ducar ji bo fonksiyona belaş () ji bo yek devera bîranînê, rijandinên ravekera pelan, veqetandin û derbaskirina nîşangirên betal, gihîştina blokên bîranîna azadkirî, karanîna nirxên nedestpêkkirî, hwd. Bikaranîna moda nû ya ji bo koda OpenSSL-ê jixwe naskirina gengaz kiriye lawazbûna xeternak.
  • Optimîzasyonên navprocedural ên çêtir kirin. Derbasbûna IPA-SRA (Interprocedural Scalar Shared Replacement) ji nû ve hatî sêwirandin da ku di dema girêdanê de bixebite û, di nav tiştên din de, naha nirxên hesabkirî û nehatine vegerandin radike. Di moda xweşbînkirina "-O2" de, vebijarka "-finline-functions" tê çalak kirin, ku ji nû ve tê guheztin da ku koda tevlihevtir li ser performansa darvekirinê xweş bike. Xebata heurîstîkê ya ji bo bicihkirina fonksiyona hundurîn bileztir bûye. Berfirehkirina hundurîn û heurîstîkên klonkirina fonksiyonê naha dikarin agahdariya li ser rêzikên nirxan bikar bînin da ku bandoriya veguherînên kesane pêşbîn bikin. Ji bo C++, rastbûna parkirina nasnavên-bingeha tîpan baştir bûye.
  • Optimîzasyonên Dema Girêdana Pêşkeftî (LTO). Pêvekirina nû ya nûvekirî zêde kir lto-dump ji bo vesazkirina agahdariya li ser pelên tiştan bi bytecode LTO. Derbasên LTO-ya paralel bixweber hejmara peywirên çêkirina hevdemî têne destnîşan kirin û, heke ew nekarin werin destnîşankirin, agahdariya di derbarê hejmara navikên CPU de wekî faktorek paralelbûnê bikar bînin. Kapasîteya berhevkirina bytecode LTO bi karanîna algorîtmaya zstd zêde kir.
  • Mekanîzmaya xweşbîniyê ya ku li ser bingeha encamên profîlkirina kodê (PGO - Optimîzasyona bi rêberiya profîlê) hatî pêşve xistin, ku li ser bingeha analîzek taybetmendiyên darvekirina kodê kodek çêtirîn çêdike. Di dema berhevkirinê de û veqetandina koda germ / sar de domdariya profîlê çêtir kirin. Bi rêya vebijêrkê "-fprofile-nirx» naha dikare heya 4 nirxên profîlê bişopîne, mînakî ji bo bangên nerasterast û peydakirina agahdariya profîlê ya rasttir.
  • Taybetmendiya bernamesaziya paralel ji bo zimanên C, C++ û Fortran pêk tê OpenACC 2.6, ku amûrên ji bo barkirina operasyonên li ser GPU û pêvajoyên pispor ên wekî NVIDIA PTX diyar dike. Pêkanîna standard hema hema qediya MP 5.0 vekin (Open Multi-Processing), ku API û rêbazên sepandina rêbazên bernamekirinê yên paralel li ser pergalên pir-core û hybrid (CPU + GPU / DSP) bi yekîneyên bîranîn û vektorîzasyonê yên hevbeş (SIMD) diyar dike. Taybetmendiyên wekî şertên paşîn ên taybet, rêwerzên şopandin û vegirtinê, ferman û îfadeyên use_device_addr zêde kirin. Ji bo OpenMP û OpenACC, piştgirî ji bo barkirina operasyonên li ser GPU-yên nifşê çaremîn (Fiji) û nifşê pêncemîn AMD Radeon (GCN) (VEGA 10 / VEGA 20) hatiye zêdekirin.
  • Ji bo zimanên malbata C, fonksiyona "gehiştinê" hate zêdekirin da ku gihandina fonksiyonê ji tiştên ku ji hêla referans an nîşanderê ve hatine derbas kirin vebêje, û ji bo girêdana van tiştan bi argumanên yekjimar ên ku agahdariya li ser mezinahiya tiştan vedihewîne ve girêbide. Ji bo ku bi "gihiştinê" re bixebite, taybetmendiya "type" tête bicîh kirin da ku gihîştina nerast ji fonksiyonên bikarhêner were tespît kirin, mînakî, dema nivîsandina nirxan li deverek li derveyî sînorên rêzê. Di heman demê de taybetmendiya "symver" jî tê zêdekirin ku di pelek ELF-ê de bi hejmarên guhertoyên taybetî re sembolên têkildar bike.
  • Hişyariyên nû lê zêde kirin:
    • "-Wstring-compare" (bi "-Wextra" ve hatî çalak kirin) - hişyariyê dide hebûna biwêjên ku tê de sifir bi encama bangkirina fonksiyonên strcmp û strncmp re tê berhev kirin, ku ji ber ku dirêjahî hevwate ye. argumanek ji mezinahiya argumana di argumana duyem de mezintir e.
    • "-Wzero-length-bounds" (bi "-Warray-bounds" ve hatî çalak kirin) - di derbarê gihîştina hêmanên rêzê yên dirêjahiya sifir de hişyar dike, ku dibe ku bibe sedema nivîsandina daneyên din.
    • Hişyariyên "-Warray-sounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" û "-Wstringop-overflow" hatine berfireh kirin da ku hejmara rewşên derveyî sînor berfireh bikin. ku têne desteser kirin.
  • Kapasîteya rasterast destnîşankirina karakterên berfireh di nasnameyan de bi karanîna kodkirina heyî (UTF-8-a xwerû) li şûna nîşana UCN (\uNNNN an \UNNNNNNNN) pêk anî. Bo nimûne:

    static const int π = 3;
    int get_naïve_pi() {
    vegere π;
    }

  • Ji bo zimanê C, beşek ji taybetmendiyên nû yên ku di nav standarda C2X de hatine pêşve xistin hatine bicîh kirin (bi destnîşankirina -std=c2x û -std=gnu2x ve hatî çalak kirin): piştgirî ji bo hevoksaziya "[[]]" ji bo diyarkirina taybetmendiyên wekî di C++ (wek nimûne, [[gnu ::const]], [[deprecated]], [[fallthrough]] û [[dibe_unused]]. Piştgiriyek ji bo hevoksaziya "u8" zêde kir ji bo diyarkirina berdewamên bi tîpên UTF-8.
    Makroyên nû lê zêde kirin . Guherînên "%OB" û "%Ob" li strftime zêde kirin.

  • Moda xwerû ya ji bo C-yê "-fno-common" e, ku destûrê dide gihandina guhêrbarên gerdûnî yên li ser hin platforman.
  • Ji bo C++, bi qasî 16 guhertin û nûbûn hatine pêkanîn, ku di standarda C++20 de hatine pêşve xistin. Di nav de peyva sereke ya zêdekirî "continit"
    û piştgirî ji bo dirêjkirina şablonan hatiye bicihkirin "têgehên". Têgihan dihêle hûn komek hewcedariyên pîvana şablonê diyar bikin ku, di dema berhevkirinê de, komek argumanên ku dikarin wekî pîvanên şablonê bêne pejirandin sînordar bikin. Têgîn dikarin werin bikar anîn da ku ji nakokiyên mentiqî yên di navbera taybetmendiyên celebên daneyê yên ku di nav şablonê de têne bikar anîn û taybetmendiyên celebê daneya pîvanên têketinê de dûr bisekinin.

  • G++ tesbîtkirina tevgerên nediyar ên ku ji ber guheztina tiştên domdar bi navgîniya constexpr ve hatî çêkirin peyda dike. Dema ku constexpr hesab dike ji hêla berhevkar ve vexwarina bîranînê kêm kir. Hişyariyên nû "-Wmismatched-tags" û "-Wredundant-tags" zêde kirin.
  • Vebijarkên rêza fermanê yên nû hatine pêşniyar kirin:
    • "-fallocation-dce" ji bo rakirina cotên nepêwist yên operatorên "nû" û "jêbirin".
    • "-fprofile-partial-training" ji bo neçalakkirina xweşbîniya mezinahiyê ji bo koda ku perwerdehiya wê tune ye.
    • "-fprofile-reproducible ji bo kontrolkirina asta hilberandina profîlê.
    • "-fprofile-prefix-path" ji bo pênasekirina pelrêça avakirina çavkaniya bingehîn a ku ji bo hilberîna profîlên cûda tê bikar anîn (ji bo "-fprofile-generate=profile_dir" û "-fprofile-use=profile_dir").
  • Di nivîsa hişyariyê de ji bo vebijarkên navborî, hîpergirêdan têne peyda kirin ku dihêle hûn biçin belgeyên van vebijarkan. Veguheztina URL bi karanîna vebijarka "-fdiagnostics-urls" tê kontrol kirin.
  • Operatorê pêşprocessor zêde kir "__hatiye_avakirin", ku dikare ji bo kontrolkirina fonksiyonên çêkirî were bikar anîn.
  • Fonksiyonek nû ya çêkirî "__builtin_roundeven" bi pêkanîna fonksiyona dorpêçkirinê ya ku di taybetmendiya ISO/IEC TS 18661 de hatî destnîşan kirin, mîna "dor", lê perçeyek ji 0.5 jor mezintir (bi nirxek mezintir), ji 0.5 kêmtir dorpêç dike, lê zêde kir. - xwarê (ji sifir), û wekhevî 0.5 - ji hevsengiya jimareya paşîn dest pê dike.
  • Ji bo mîmariya AArch64, piştgirî ji bo dirêjkirina SVE2 hate zêdekirin û piştgirî ji bo SVE (Pêvekkirina Vektora Scalable) çêtir bûye, di nav de piştgirîya zêdekirî ji bo fonksiyon û celebên SVE ACLE-ya çêkirî, û karanîna vektorîzasyonê. Piştgiriya LSE (Large System Extensions) û TME (Transactional Memory Extension) hate berfireh kirin. Rêwerzên nû yên ku di Armv8.5-A û Armv8.6-A de hatine pêşniyar kirin lê zêde kirin, di nav de rêwerzên ji bo hilberîna hejmarên bêserûber, dorpêçkirin, girêdana nîşana bîranînê,
    bfloat16 û pirkirina matrixê. Piştgiriya pêvajoyê zêde kir
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 û
    Marvell ThunderX3.

  • Piştgiriya ABI FDPIC (nîşankerên fonksiyonê 32-bit) ji bo ARM64 zêde kir. Pêvajoya 64-bit ji nû ve sêwirandî û xweşbîn kirin. Piştgiriya CPU zêde kir
    Arm Cortex-A77,
    Arm Cortex-A76AE û
    Arm Cortex-M35P. Piştgiriya berfireh ji bo rêwerzên hilberandina daneya ACLE, di nav de SIMD-ya 32-bit, pirkirina 16-bit, arîtmetîka lêdanê, û xweşbîniyên din ên algorîtmaya DSP-ê. Piştgiriya ceribandinê ji bo rêwerzên ACLE CDE (Pêvekkirina Datapath Custom) zêde kir.

  • Ji bo GPU-yên AMD-ê yên li ser bingeha mîkroarchitectura GCN-ê di paşîn de hilberîna kod û vektorîzasyonek girîng çêtir kirin.
  • Ji bo mîmariya AVR-ê ji bo amûrên mîna XMEGA-yê piştgirî zêde kir
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808ATmega809, ATmega1608ATmega1609 3208, ATmega3209, ATmega4808 4809, ATmegaXNUMX û ATmegaXNUMX.

  • Ji bo mîmariyên IA-32/x86-64 pêvekek mîmariya koma rêwerzan a nû ya Intel ENQCMD (-menqcmd) hate zêdekirin. Piştgiriya ji bo Intel Cooperlake (-march=cooperlake, dirêjkirina AVX512BF16 ISA tê de) û Tigerlake (-march=tigerlake, pêvekên MOVDIRI, MOVDIR64B û AVX512VP2INTERSECT ISA) CPU-yê zêde kir.
  • Pêkanîna HSAIL (Zimanê Navbera Mîmariya Sîstema Heterogeneous) ji bo pergalên hesabker ên heterojen ên ku li ser mîmariya HSA-yê têne damezrandin, hate paşguh kirin û dibe ku di weşanek pêşerojê de were rakirin.

Source: opennet.ru

Add a comment