Rilis saka GCC 9 compiler suite

Sawise setahun pembangunan diterbitake release saka pesawat free compiler GCC 9.1, Rilis utama pisanan ing cabang GCC 9.x anyar. Sesuai karo skema anyar nomer release, versi 9.0 digunakake sak proses pembangunan, lan sakcepete sadurunge release saka GCC 9.1, cabang GCC 10.0 wis branched mati, ing basis kang release pinunjul sabanjuré, GCC 10.1, bakal kawangun.

GCC 9.1 kacathet kanggo stabil support kanggo standar C ++ 17, terus kanggo ngleksanakake kemampuan saka mangsa C ++ 20 standar (codenamed C ++ 2a), Gawan ing frontend kanggo basa D, support sebagean kanggo OpenMP 5.0 , support meh lengkap kanggo OpenACC 2.5, nambah skalabilitas optimizations interprocedural lan optimizations ing tataran naleni, expansion saka alat diagnostik lan tambahan bebaya anyar, backends kanggo OpenRISC, C-SKY V2 lan AMD GCN GPU.

Utama ganti:

  • Dhukungan tambahan kanggo basa pamrograman D. GCC kalebu frontend karo compiler GDC (Gnu D Compiler) lan perpustakaan runtime (libphobos), sing ngidini sampeyan nggunakake GCC standar kanggo mbangun program ing basa pemrograman D. Proses ngaktifake dhukungan basa D ing GCC wis diwiwiti bali ing 2011, nanging diseret ing amarga kudu nggawa kode kasebut tundhuk karo syarat GCC lan masalah transfer hak properti intelektual menyang Digital Mars, sing ngembangake basa pamrograman D;
  • Dandan wis digawe kanggo generator kode. Contone, nggunakake Sastranegara beda kanggo nggedhekake Ngalih ekspresi (meja mlumpat, test bit, wit kaputusan) gumantung ing kahanan wis dipun ginakaken. Nambahake kemampuan kanggo ngowahi fungsi linear sing kalebu ekspresi Ngalih nggunakake optimasi "-ftree-switch-conversion" (contone, sakumpulan kahanan kaya "kasus 2: kepiye = 205; break; kasus 3: kepiye = 305; break ;” bakal diowahi dadi "100 * carane + 5";
  • Optimizations interprocedural apik. Setelan panyebaran inline wis diadaptasi kanggo basis kode C ++ modern lan ditambahi karo paramèter anyar max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns lan uninlined -thunk-wektu. Ngapikake akurasi lan agresivitas pemisahan kode kadhemen / panas. Skalabilitas apik kanggo gedhe banget unit terjemahan (contone, nalika nglamar optimasi ing tataran ngubungake kanggo program gedhe);
  • Mekanisme optimasi adhedhasar asil saka profil kode (PGO - Optimization dipandu Profil) wis apik, kang ngasilake kode sing luwih optimal adhedhasar analisis karakteristik saka eksekusi kode. Pilihan ringkesan "-fprofile-nggunakake"Saiki kalebu mode optimasi "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" lan "-ftree-loop-distribution". Mbusak inklusi histogram kanthi counter ing file, sing nyuda ukuran file kanthi profil (histogram saiki digawe kanthi cepet nalika nindakake optimasi sajrone ngubungake);
  • Enhanced Linking Time Optimizations (LTO). Nyederhanakake jinis diwenehake sadurunge ngasilake asil, sing bisa nyuda ukuran file obyek LTO kanthi signifikan, nyuda konsumsi memori ing tahap ikatan, lan nambah paralelisasi operasi. Jumlah partisi (-param lto-partisi) wis tambah saka 32 kanggo 128, kang mbenakake kinerja ing sistem karo nomer akeh Utas CPU. Parameter wis ditambahake kanggo ngontrol jumlah pangolahan pangoptimal
    "-param lto-max-streaming-parallelism";

    Akibaté, dibandhingake karo GCC 8.3, optimasi sing dikenalaké ing GCC 9 diijini nyuda wektu kompilasi Firefox 5 lan LibreOffice 66 kira-kira 6.2.3%. Ukuran file obyek suda 7%. Wektu naleni ing CPU 8-inti suda 11%. Tahap optimasi sekuensial saka tahap ngubungake saiki 28% luwih cepet lan nggunakake memori 20% kurang. Konsumsi memori saben prosesor saka tahap paralel LTO mudhun 30%;

  • Umume spesifikasi pemrograman paralel ditindakake kanggo basa C, C ++ lan Fortran OpenACC 2.5, sing nemtokake alat kanggo mbukak operasi ing GPU lan prosesor khusus kayata NVIDIA PTX;
  • Dhukungan parsial kanggo standar wis dileksanakake kanggo C lan C ++ Bukak MP 5.0 (Open Multi-Processing), sing nemtokake API lan cara ngetrapake metode pemrograman paralel kanggo basa C, C ++ lan Fortran ing sistem multi-inti lan hibrida (CPU+GPU/DSP) kanthi memori lan unit vektorisasi (SIMD) sing dienggo bareng. ;
  • Bebaya anyar wis ditambahake kanggo basa C: "-Waddress-of-dikempalken-anggota" (Nilai pointer sing ora selaras kanggo anggota sing dikemas saka struktur utawa kesatuan) lan
    «-Wabsolute-nilai" (nalika ngakses fungsi kanggo ngitung nilai absolut, yen ana fungsi sing luwih cocok kanggo argumen sing ditemtokake, contone, fabs (3.14) kudu digunakake tinimbang abs (3.14). Bebaya anyar ditambahake kanggo C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" lan "-Wclass-conversion". Akeh bebaya sing kasedhiya sadurunge wis ditambahi;

  • Nambahake dhukungan eksperimen kanggo bagean saka standar basa C ing mangsa ngarep, kanthi jeneng kode C2x. Kanggo ngaktifake dhukungan C2x, gunakake opsi "-std=c2x" lan "-std=gnu2x" (kanggo ngaktifake ekstensi GNU). Standar kasebut isih ana ing tahap awal pangembangan, mula kemampuane, mung ekspresi _Static_assert kanthi siji argumen sing didhukung (_Static_assert karo rong argumen sing distandarisasi ing C11);
  • Dhukungan kanggo standar C ++ 17 wis diumumake stabil. Ing frontend, Kapabilitas basa C ++ 17 kebak dipun ginakaken, lan ing libstdc ++, fungsi perpustakaan ditetepake ing standar cedhak karo implementasine lengkap;
  • Terus implementasine unsur standar C ++ 2a mangsa ngarep. Contone, kemampuan kanggo nyakup rentang sajrone initialization wis ditambahake, ekstensi kanggo ekspresi lambda wis dileksanakake, dhukungan kanggo anggota kosong saka struktur data lan atribut sing mungkin / ora mungkin wis ditambahake, kemampuan kanggo nelpon fungsi virtual ing ekspresi kondisional wis kasedhiya. , lsp.
    Kanggo ngaktifake dhukungan C++ 2a, gunakake opsi "-std=c++2a" lan "-std=gnu++2a". Nambahake file header bit lan versi menyang libstdc ++ kanggo C ++ 2a, std :: remove_cvref, std :: unwrap_reference, std :: unwrap_decay_ref, std :: is_nothrow_convertible lan std :: type_identity traits, std :: midlerp, std:: , std::bind_front,
    std :: riko, std :: is_constant_evaluated lan std :: assume_aligned, ditambahaké support kanggo jinis char8_t, dipun ginakaken kemampuan kanggo mriksa ater-ater lan suffix saka strings (starts_with, ends_with);

  • Dhukungan tambahan kanggo prosesor ARM anyar
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE lan Neoverse N1. Dhukungan tambahan kanggo instruksi sing diwenehake ing Armv8.3-A kanggo nggarap nomer kompleks, generasi nomer pseudo-acak (rng) lan tag memori (memtag), uga instruksi kanggo mblokir serangan sing ana hubungane karo eksekusi spekulatif lan operasi unit prediksi cabang. . Kanggo arsitektur AArch64, mode proteksi wis ditambahake persimpangan tumpukan lan tumpukan (“-fstack-clash-protection”). Kanggo nggunakake fitur arsitektur Armv8.5-A, opsi "-march=armv8.5-a" wis ditambahake

  • Iku kalebu backend kanggo kode ngasilaken kanggo AMD GPU adhedhasar microarchitecture GCN. Implementasine saiki diwatesi kanggo kompilasi aplikasi siji-threaded (dhukungan kanggo nindakake petungan multi-threaded liwat OpenMP lan OpenACC bakal ditawakake mengko) lan dhukungan kanggo GPU Fiji lan Vega 10;
  • Added backend anyar kanggo prosesor OpenRISC;
  • Added backend kanggo prosesor C-SKY V2, diprodhuksi dening perusahaan Cina kanthi jeneng sing padha kanggo macem-macem piranti konsumen;
  • Kabeh opsi baris perintah sing ngoperasikake nilai byte ndhukung suffixes kb, KiB, MB, MiB, GB lan GiB;
  • Dilaksanakake opsi "-flive-patching=[inline-only-static|inline-clone]" ngidini sampeyan entuk kompilasi sing aman kanggo sistem patch langsung amarga kontrol multi-level babagan panggunaan interprocedural (IPA) optimasi;
  • Nambahake opsi "--completion" kanggo kontrol pilihan rampung nalika nggunakake bash;
  • Piranti diagnostik nyedhiyakake tampilan kutipan teks sumber sing nuduhake nomer baris lan menehi tandha visual informasi sing gegandhengan, kayata jinis operan. Kanggo mateni tampilan nomer baris lan label, opsi "-fno-diagnostics-show-line-numbers" lan "-fno-diagnostics-show-labels" kasedhiya;

    Rilis saka GCC 9 compiler suite

  • Digedhekake alat kanggo diagnosa kesalahan ing kode C ++, ningkatake keterbacaan informasi babagan panyebab kesalahan lan nyorot paramèter masalah;

    Rilis saka GCC 9 compiler suite

  • Opsi sing ditambahake "-fdiagnostics-format = json", sing ngidini ngasilake output diagnostik ing format sing bisa diwaca mesin (JSON);
  • Nambahake opsi profil anyar "-fprofile-filter-files" lan "-fprofile-exclude-files" kanggo milih file sumber sing bakal diproses;
  • AddressSanitizer nyedhiyakake kode verifikasi sing luwih kompak kanggo variabel otomatis, sing nyuda konsumsi memori file eksekusi sing dicenthang;
  • Ngapikake output ing "-fopt-info» (informasi rinci babagan optimasi sing ditambahake). Ditambahake ater-ater anyar "dioptimalake" lan "ora kejawab", saliyane prefiks "cathetan" sing kasedhiya sadurunge. Nambahake output informasi babagan pengambilan keputusan babagan inline-unfolding lan vektorisasi siklus;
  • Ditambahake pilihan "-fsave-optimization-record", nalika kasebut, GCC nyimpen file SRCFILE.opt-record.json.gz kanthi katrangan babagan keputusan babagan panggunaan optimasi tartamtu. Opsi anyar beda karo mode "-fopt-info" kanthi kalebu metadata tambahan, kayata informasi babagan profil lan rantai inline;
  • Opsi sing ditambahake "-fipa-stack-alignment" lan "-fipa-reference-addressable" kanggo ngontrol alignment tumpukan lan nggunakake mode alamat (nulis-mung utawa diwaca-tepat) kanggo variabel statis sajrone optimasi interprocedural;
  • Fungsi sing dibangun anyar dikenalake kanggo ngontrol ikatan atribut uga prilaku sing ana gandhengane karo prediksi cabang lan eksekusi instruksi spekulatif: "__builtin_has_attribute«,«__builtin_expect_with_probability"Lan"__builtin_speculation_safe_value". A atribut anyar wis ditambahake kanggo fungsi, variabel lan jinis salinan;
  • Dhukungan lengkap kanggo input / output asinkron wis ditindakake kanggo basa Fortran;
  • Dhukungan kanggo platform Solaris 10 (*-*-solaris2.10) lan Cell / BE (Cell Broadband Engine SPU) wis ora digunakake lan bakal dicopot ing rilis utama sabanjure. Dhukungan kanggo arsitektur Armv2, Armv3, Armv5 lan Armv5E wis mandheg. Dhukungan kanggo Intel MPX (Ekstensi Perlindungan Memori) wis mandheg.

Source: opennet.ru

Add a comment