Liberazione di a suite di compilatori GCC 9

Dopu un annu di sviluppu publicatu liberazione di un inseme gratuitu di compilatori GCC 9.1, a prima liberazione maiò in a nova filiera GCC 9.x. In cunfurmità cù novu schema numeri di liberazione, a versione 9.0 hè stata aduprata in u prucessu di sviluppu, è pocu prima di a liberazione di GCC 9.1, a filiera GCC 10.0 avia digià ramificata, nantu à a basa di a quale a prossima liberazione significativa, GCC 10.1, seria furmata.

GCC 9.1 hè notu per stabilizzà u supportu per u standard C ++ 17, cuntinuendu à implementà e capacità di u futuru standard C ++ 20 (codenamed C ++ 2a), inclusione in u frontend per a lingua D, supportu parziale per OpenMP 5.0 , supportu quasi cumpletu per OpenACC 2.5, aumentanu a scalabilità di l'ottimisazioni interprocedurali è l'ottimisazioni in u stadiu di ubligatoriu, espansione di strumenti di diagnostichi è aghjunta di novi avvisi, backends per OpenRISC, C-SKY V2 è AMD GCN GPU.

menu cambià:

  • Aghjunghje supportu per a lingua di prugrammazione D. GCC include un frontend cù un compilatore GDC (Gnu D Compiler) è e librerie runtime (libphobos), chì permettenu di utilizà GCC standard per custruisce prugrammi in a lingua di prugrammazione D. U prucessu di attivà u supportu di lingua D in GCC hà principiatu torna in 2011, ma trascinatu per via di a necessità di mette u codice in cunfurmità cù i bisogni GCC è i prublemi cù u trasferimentu di i diritti di pruprietà intellettuale à Digital Mars, chì sviluppa a lingua di prugrammazione D;
  • Migliuramenti sò stati fatti à u generatore di codice. Per esempiu, l'usu di diverse strategie per espansione l'espressioni Switch (tavola di salta, test di bit, arbre di decisione) secondu e situazioni hè stata implementata. Aggiunta l'abilità di trasfurmà e funzioni lineari chì includenu una espressione Switch utilizendu l'ottimisazione "-ftree-switch-conversion" (per esempiu, un settore di cundizioni cum'è "casu 2: cumu = 205; ruttura; casu 3: cumu = 305; rottura); ;" serà cunvertitu in "100 * cumu + 5";
  • Ottimisazioni interprocedurali mejorate. I paràmetri di implementazione in linea sò stati adattati per i codici C++ muderni è espansi cù novi parametri max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns è uninlined - tempu di ringraziu. Precisione è aggressività mejorata di a separazione di codice friddu / caldu. Scalabilità mejorata per assai grande unità di traduzzione (per esempiu, quandu applicà l'ottimisazione in u stadiu di ligame à i grandi prugrammi);
  • U mecanismu di ottimisazione basatu annantu à i risultati di u prufilu di codice (PGO - Profile-guided optimization) hè statu migliuratu, chì genera più codice ottimali basatu annantu à l'analisi di e caratteristiche di l'esekzione di codice. Opzione riassuntu "-fprofile-usu" include avà i modi di ottimisazione "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" è "-ftree-loop-distribution". Eliminatu l'inclusione di l'histogrammi cù cuntatori in i schedari, chì riduce a dimensione di i schedari cù profili (l'istogrammi sò oghji generati nantu à a mosca quandu eseguite ottimisazioni durante u ligame);
  • Ottimisazioni di u tempu di cunnessione (LTO) rinfurzata. A simplificazione di i tipi hè stata furnita prima di generà u risultatu, chì hà permessu di riduce significativamente a dimensione di i schedarii di l'ughjettu LTO, riduce u cunsumu di memoria in u stadiu di ubligatoriu, è migliurà a parallelizazione di l'operazioni. U numaru di partizioni (-param lto-partitions) hè statu aumentatu da 32 à 128, chì migliurà u rendiment in sistemi cù un gran numaru di filamenti CPU. Un paràmetru hè statu aghjuntu per cuntrullà u numeru di prucessi di ottimisazione
    "-param lto-max-streaming-parallelism";

    In u risultatu, paragunatu à GCC 8.3, l'ottimisazioni introdutte in GCC 9 permessu riduce u tempu di compilazione di Firefox 5 è LibreOffice 66 da circa 6.2.3%. A dimensione di i schedari di l'ughjettu diminuite da 7%. U tempu di ubligatoriu nantu à una CPU di 8 core diminuite da 11%. A tappa di ottimisazione sequenziale di u stadiu di ligame hè avà 28% più veloce è cunsuma 20% menu memoria. U cunsumu di memoria di ogni processore di u stadiu parallelizatu di LTO diminuite da 30%;

  • A maiò parte di a specificazione di prugrammazione parallela hè implementata per e lingue C, C++ è Fortran OpenACC 2.5, chì definisce arnesi per l'operazione di scaricamentu nantu à GPU è processori specializati cum'è NVIDIA PTX;
  • Un supportu parziale per u standard hè statu implementatu per C è C++ Aprite MP 5.0 (Open Multi-Processing), chì definisce l'API è i metudi di applicà metudi di prugrammazione parallela per i linguaggi C, C++ è Fortran nantu à sistemi multi-core è ibridi (CPU + GPU / DSP) cù memoria è unità di vectorizazione cumuni (SIMD) ;
  • Novi avvirtimenti sò stati aghjunti per a lingua C: "-Address-di-membru-imballatu" (valore di puntatore micca allineatu à un membru imballatu di una struttura o unione) è
    «-Wabsolute-value" (quandu accede à e funzioni per calculà un valore assolutu, se ci hè una funzione più adatta per l'argumentu specificatu, per esempiu, fabs (3.14) deve esse usatu invece di abs (3.14). Novi avvirtimenti aghjuntu per C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" è "-Wclass-conversion". Parechji avvisi dispunibuli dispunibuli sò stati allargati;

  • Aghjunghje un supportu sperimentale per una parte di u futuru standard di lingua C, nome in codice C2x. Per attivà u supportu C2x, utilizate l'opzioni "-std=c2x" è "-std=gnu2x" (per attivà l'estensione GNU). U standard hè sempre in una prima fase di sviluppu, dunque, di e so capacità, solu l'espressione _Static_assert cù un argumentu hè supportatu (_Static_assert cù dui argumenti hè standardizatu in C11);
  • U supportu per u standard C++ 17 hè statu dichjaratu stabile. In u frontend, e capacità di lingua di C++ 17 sò implementate cumplettamente, è in libstdc++, e funzioni di a biblioteca definite in u standard sò vicinu à l'implementazione completa;
  • Cuntinuatu implementazione elementi di u futuru standard C++ 2a. Per esempiu, l'abilità di include intervalli durante l'inizializazione hè stata aghjunta, l'estensioni per l'espressioni lambda sò state implementate, u supportu per i membri vacanti di strutture di dati è attributi probabili / improbabili hè statu aghjuntu, a capacità di chjamà funzioni virtuali in espressioni cundiziunali hè stata furnita. , etc.
    Per attivà u supportu C++2a, utilizate l'opzioni "-std=c++2a" è "-std=gnu++2a". Aggiunti i file di intestazione di bit è versione à libstdc++ per C++ 2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible è std::type_identity traits, std::midpoint, std::lerp funzioni , std::bind_front,
    std::visit, std::is_constant_evaluated è std::assume_aligned, aghjustatu supportu per u tippu char8_t, implementatu a capacità di verificà u prefissu è u suffissu di strings (starts_with, ends_with);

  • Aghjunghje supportu per i novi processori ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE è Neoverse N1. Aghjunghje supportu per l'istruzzioni introdutte in Armv8.3-A per travaglià cù numeri cumplessi, generazione di numeri pseudo-aleatoriu (rng) è tagging di memoria (memtag), è ancu struzzioni per bluccà attacchi ligati à l'esekzione speculativa è l'operazione di l'unità di prediczione di ramu. . Per l'architettura AArch64, un modu di prutezzione hè statu aghjuntu intersezioni di stack and heap ("-fstack-clash-protection"). Per utilizà e funziunalità di l'architettura Armv8.5-A, l'opzione "-march=armv8.5-a" hè stata aghjunta

  • Include un backend per a generazione di codice per GPU AMD basatu nantu à a microarchitettura GCN. L'implementazione hè attualmente limitata à a compilazione di l'applicazioni uni-threaded (u supportu per a realizazione di calculi multi-threaded via OpenMP è OpenACC serà prupostu dopu) è supportu per GPU Fiji è Vega 10;
  • Aggiuntu novu backend per i processori OpenRISC;
  • Backend aghjuntu per i processori C-SKY V2, pruduciutu da a cumpagnia chinesa di u listessu nome per diversi dispositi di cunsumatori;
  • Tutte l'opzioni di linea di cummanda chì operanu i valori di byte supportanu i suffissi kb, KiB, MB, MiB, GB è GiB;
  • Implementatu l'opzione "-flive-patching=[inline-only-static|inline-clone]" permette di ottene una compilazione sicura per i sistemi di patch in diretta per via di u cuntrollu multi-livellu di l'usu di interprocedurali (IPA) ottimisazioni;
  • Aggiunta l'opzione "--completion" per un cuntrollu finitu di u cumpletu di l'opzioni quandu si usa bash;
  • L'uttine di diagnostica furniscenu mostra di l'estratti di u testu fonte chì indicanu u numeru di linea è chì marcanu visualmente l'infurmazioni relative, cum'è i tipi di operandi. Per disattivà a visualizazione di numeri di linea è etichette, l'opzioni "-fno-diagnostics-show-line-numbers" è "-fno-diagnostics-show-labels" sò furnite;

    Liberazione di a suite di compilatori GCC 9

  • Expanded Strumenti per diagnosticà l'errori in u codice C ++, leghjibilità mejorata di l'infurmazioni nantu à e cause di l'errore è mette in risaltu i parametri problematici;

    Liberazione di a suite di compilatori GCC 9

  • Opzione aghjunta "-fdiagnostics-format = json", chì permette di generà output di diagnostica in formatu leggibile da a macchina (JSON);
  • Aghjunghjite novi opzioni di prufilu "-fprofile-filter-files" è "-fprofile-exclude-files" per selezziunà i fugliali fonte per esse processati;
  • AddressSanitizer furnisce a generazione di codice di verificazione più compactu per e variabili automatiche, chì riduce u cunsumu di memoria di u schedariu eseguibile verificatu;
  • Pruduzzione migliurata in "-fopt-info» (infurmazione dettagliata nantu à l'ottimisazioni aghjuntu). Aggiunti novi prefissi "optimized" è "missed", in più di u prefissu dispunibile prima "nota". Aghjunghje output di infurmazioni nantu à a decisione nantu à u sviluppu in linea è a vectorizazione di cicli;
  • Aghjunghje l'opzione "-fsave-optimization-record", quandu hè specificatu, GCC salva u schedariu SRCFILE.opt-record.json.gz cù una descrizzione di e decisioni nantu à l'usu di certi ottimisazioni. A nova opzione differisce da u modu "-fopt-info" includendu metadati supplementari, cum'è l'infurmazioni nantu à u prufilu è e catene inline;
  • Opzioni aghjunte "-fipa-stack-alignment" è "-fipa-reference-addressable" per cuntrullà l'allineamentu di stack è l'usu di modi d'indirizzu (scrittu solu o leghje-exact) per variabili statichi durante l'ottimisazioni interprocedurali;
  • Nuvelle funzioni integrate sò introdutte per cuntrullà l'attribuzione di l'attributi è ancu u cumpurtamentu ligatu à a predizione di ramu è l'esekzione di istruzzioni speculativa: "__builtin_has_attribute«,«__aspettu_custruitu_cun_prubabilità"E"__builtin_speculation_safe_value". Un novu attributu hè statu aghjuntu per e funzioni, variàbili è tipi copia;
  • U sustegnu tutale per l'input / output asincronu hè statu implementatu per a lingua Fortran;
  • U supportu per e piattaforme Solaris 10 (*-*-solaris2.10) è Cell/BE (Cell Broadband Engine SPU) hè statu obsoletu è serà eliminatu in a prossima versione maiò. U supportu per l'architetture Armv2, Armv3, Armv5 è Armv5E hè stata interrotta. U supportu per Intel MPX (Estensioni di Proteczione di Memoria) hè stata interrotta.

Source: opennet.ru

Add a comment