Kutolewa kwa kikundi cha mkusanyaji wa GCC 9

Baada ya mwaka wa maendeleo iliyochapishwa kutolewa kwa seti ya bure ya wakusanyaji GCC 9.1, toleo kuu la kwanza katika tawi jipya la GCC 9.x. Kulingana na mpango mpya nambari za kutolewa, toleo la 9.0 lilitumika katika mchakato wa ukuzaji, na muda mfupi kabla ya kutolewa kwa GCC 9.1, tawi la GCC 10.0 lilikuwa tayari limegawanyika, kwa msingi ambao toleo muhimu lililofuata, GCC 10.1, lingeundwa.

GCC 9.1 inajulikana kwa kuimarisha usaidizi wa kiwango cha C++17, kuendelea kutekeleza uwezo wa kiwango cha C++20 cha siku zijazo (kilichopewa jina C++2a), kujumuishwa katika mstari wa mbele wa lugha ya D, usaidizi wa sehemu ya OpenMP 5.0 , karibu usaidizi kamili wa OpenACC 2.5, huongeza uimara wa uboreshaji na uboreshaji wa kiutaratibu katika hatua ya kisheria, upanuzi wa zana za uchunguzi na uongezaji wa maonyo mapya, backends kwa OpenRISC, C-SKY V2 na AMD GCN GPU.

kuu mabadiliko:

  • Usaidizi ulioongezwa kwa lugha ya programu ya D. GCC inajumuisha sehemu ya mbele iliyo na mkusanyaji GDC (Mkusanyaji wa Gnu D) na maktaba za wakati wa utekelezaji (libphobos), zinazokuruhusu kutumia GCC ya kawaida kuunda programu katika lugha ya programu ya D. Mchakato wa kuwezesha usaidizi wa lugha ya D katika GCC imeanza nyuma mwaka 2011, lakini kuburutwa kwa sababu ya hitaji la kuleta msimbo katika kufuata mahitaji ya GCC na matatizo na uhamisho wa haki miliki kwa Digital Mars, ambayo inakuza lugha ya programu ya D;
  • Maboresho yamefanywa kwa jenereta ya msimbo. Kwa mfano, matumizi ya mikakati tofauti ya kupanua Semi za Kubadilisha (jedwali la kuruka, mtihani wa biti, mti wa uamuzi) kulingana na hali imetekelezwa. Umeongeza uwezo wa kubadilisha vitendaji vya mstari unaojumuisha usemi wa Kubadilisha kwa kutumia uboreshaji wa "-ftree-switch-conversion" (kwa mfano, seti ya masharti kama vile "kesi ya 2: jinsi = 205; break; kesi 3: how = 305; break ;” itabadilishwa kuwa "100 * jinsi + 5";
  • Uboreshaji wa kiutaratibu ulioboreshwa. Mipangilio ya uwekaji wa ndani imerekebishwa kwa misingi ya kisasa ya C++ na kupanuliwa kwa vigezo vipya max-inline-insns-small, max-inline-insns-size, unlined-function-insns, unline-function-time, unlineline-insns-insns na wasio na mstari. -wakati wa kupiga picha. Usahihi ulioboreshwa na ukali wa utenganishaji wa kanuni baridi/moto. Kuboresha scalability kwa kubwa sana vitengo vya tafsiri (kwa mfano, wakati wa kutumia optimization katika hatua ya kuunganisha kwa programu kubwa);
  • Utaratibu wa uboreshaji kulingana na matokeo ya uwekaji wasifu wa msimbo (PGO - Uboreshaji unaoongozwa na Wasifu) umeboreshwa, ambayo hutoa msimbo bora zaidi kulingana na uchanganuzi wa sifa za utekelezaji wa misimbo. Chaguo la muhtasari "-tumia wasifu" sasa inajumuisha modi za uboreshaji "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" na "-ftree-loop-distribution". Imeondolewa kuingizwa kwa histograms na counters katika faili, ambayo ilipunguza ukubwa wa faili zilizo na wasifu (histograms sasa zinazalishwa kwa kuruka wakati wa kufanya uboreshaji wakati wa kuunganisha);
  • Uboreshaji wa Muda wa Kuunganisha (LTO) ulioimarishwa. Urahisishaji wa aina ulitolewa kabla ya kutoa matokeo, ambayo ilifanya iwezekanavyo kupunguza kwa kiasi kikubwa ukubwa wa faili za kitu cha LTO, kupunguza matumizi ya kumbukumbu katika hatua ya kumfunga, na kuboresha usawa wa shughuli. Idadi ya partitions (-param lto-partitions) imeongezwa kutoka 32 hadi 128, ambayo inaboresha utendaji kwenye mifumo yenye idadi kubwa ya nyuzi za CPU. Kigezo kimeongezwa ili kudhibiti idadi ya michakato ya viboreshaji
    "-param lto-max-streaming-parallelism";

    Kwa hivyo, ikilinganishwa na GCC 8.3, uboreshaji ulioletwa katika GCC 9 ruhusiwa punguza muda wa mkusanyiko wa Firefox 5 na LibreOffice 66 kwa takriban 6.2.3%. Ukubwa wa faili za kitu ulipungua kwa 7%. Muda wa kufunga kwenye CPU-8 ulipungua kwa 11%. Hatua ya uboreshaji mfuatano ya hatua ya kuunganisha sasa ni 28% haraka na hutumia kumbukumbu 20%. Matumizi ya kumbukumbu ya kila processor ya hatua ya sambamba ya LTO ilipungua kwa 30%;

  • Uainishaji mwingi wa programu sambamba hutekelezwa kwa lugha za C, C++ na Fortran OpenACC 2.5, ambayo hufafanua zana za kupakia shughuli kwenye GPU na vichakataji maalumu kama vile NVIDIA PTX;
  • Usaidizi mdogo wa kiwango umetekelezwa kwa C na C++ Fungua MP 5.0 (Open Multi-Processing), ambayo inafafanua API na mbinu za kutumia mbinu za programu sambamba za lugha za C, C++ na Fortran kwenye mifumo ya msingi na mseto (CPU+GPU/DSP) yenye vitengo vya kumbukumbu na vekta (SIMD) iliyoshirikiwa. ;
  • Maonyo mapya yameongezwa kwa lugha ya C: "-Waddress-ya-packed-mwanachama" (thamani ya kielekezi kisicholinganishwa kwa mwanachama aliyejaa wa muundo au umoja) na
    Β«-Thamani-kabisa" (wakati wa kupata chaguo za kukokotoa za kukokotoa thamani kamili, ikiwa kuna chaguo la kukokotoa linalofaa zaidi kwa hoja iliyobainishwa, kwa mfano, fabs(3.14) inapaswa kutumika badala ya abs(3.14). Maonyo mapya yameongezwa kwa C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" na "-Wclass-conversion". Maonyo mengi yaliyopatikana hapo awali yamepanuliwa;

  • Umeongeza usaidizi wa majaribio kwa sehemu ya kiwango cha baadaye cha lugha ya C, iliyopewa jina la C2x. Ili kuwezesha usaidizi wa C2x, tumia chaguo "-std=c2x" na "-std=gnu2x" (ili kuwezesha viendelezi vya GNU). Kiwango bado kiko katika hatua ya awali ya maendeleo, kwa hiyo, ya uwezo wake, ni usemi _Static_assert wenye hoja moja pekee ndio unaoungwa mkono (_Static_assert with two arguments is sanifu katika C11);
  • Usaidizi wa kiwango cha C++17 umetangazwa kuwa thabiti. Katika sehemu ya mbele, uwezo wa lugha wa C++17 unatekelezwa kikamilifu, na katika libstdc++, kazi za maktaba zilizofafanuliwa katika kiwango ziko karibu na utekelezaji kamili;
  • Inaendelea utekelezaji vipengele vya kiwango cha C++2a cha baadaye. Kwa mfano, uwezo wa kujumuisha masafa wakati wa uanzishaji umeongezwa, viendelezi vya misemo ya lambda vimetekelezwa, usaidizi kwa washiriki tupu wa miundo ya data na sifa zinazowezekana/zisizotarajiwa zimeongezwa, uwezo wa kuita vitendaji dhahania katika misemo ya masharti umetolewa. , na kadhalika.
    Ili kuwezesha usaidizi wa C++2a, tumia chaguo za "-std=c++2a" na "-std=gnu++2a". Imeongeza faili za vichwa vidogo na vya toleo kwenye libstdc++ kwa C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible na std::type_identity sifa, std:midpoint: pdst: , std::bind_mbele,
    std::tembelea, std::is_constant_evaluated na std::assume_aligned, imeongeza usaidizi kwa aina ya char8_t, ilitekeleza uwezo wa kuangalia kiambishi awali na kiambishi tamati cha mifuatano (huanza_na, huisha_na);

  • Usaidizi ulioongezwa kwa vichakataji vipya vya ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE na Neoverse N1. Usaidizi ulioongezwa kwa maagizo yaliyoletwa katika Armv8.3-A ya kufanya kazi na nambari changamano, kizazi cha nambari bandia (rng) na tagi ya kumbukumbu (memtag), pamoja na maagizo ya kuzuia mashambulizi yanayohusiana na utekelezaji wa kubahatisha na uendeshaji wa kitengo cha utabiri wa tawi. . Kwa usanifu wa AArch64, hali ya ulinzi imeongezwa makutano ya stack na lundo ("-fstack-clash-protection"). Ili kutumia vipengele vya usanifu wa Armv8.5-A, chaguo "-march=armv8.5-a" limeongezwa.

  • Inajumuisha mandharinyuma ya kuzalisha msimbo wa AMD GPU kulingana na usanifu mdogo wa GCN. Utekelezaji kwa sasa ni mdogo kwa ujumuishaji wa programu zenye uzi mmoja (msaada wa kufanya hesabu zenye nyuzi nyingi kupitia OpenMP na OpenACC utatolewa baadaye) na usaidizi kwa GPU Fiji na Vega 10;
  • Imeongeza mandhari mpya ya vichakataji OpenRISC;
  • Aliongeza backend kwa wasindikaji C-SKY V2, zinazozalishwa na kampuni ya Kichina ya jina moja kwa vifaa mbalimbali vya watumiaji;
  • Chaguzi zote za mstari wa amri zinazofanya kazi kwa maadili ya kawaida zinaunga mkono viambishi vya kb, KiB, MB, MiB, GB na GiB;
  • Imetekelezwa chaguo la β€œ-flive-patching=[inline-only-static|inline-clone]” hukuruhusu kufikia mkusanyiko salama wa mifumo ya kubandika moja kwa moja kutokana na udhibiti wa ngazi mbalimbali juu ya matumizi ya taratibu (IPA) uboreshaji;
  • Chaguo la "--completion" lililoongezwa kwa udhibiti mzuri wa kukamilika kwa chaguo wakati wa kutumia bash;
  • Zana za uchunguzi hutoa maonyesho ya manukuu ya maandishi chanzo yanayoonyesha nambari ya mstari na maelezo yanayohusiana ya kuashiria, kama vile aina za uendeshaji. Ili kuzima maonyesho ya nambari za mstari na maandiko, chaguo "-fno-diagnostics-show-line-numbers" na "-fno-diagnostics-show-labels" hutolewa;

    Kutolewa kwa kikundi cha mkusanyaji wa GCC 9

  • Imepanuliwa zana za kugundua makosa katika nambari ya C ++, uboreshaji wa usomaji wa habari juu ya sababu za makosa na kuonyesha kwa vigezo vya shida;

    Kutolewa kwa kikundi cha mkusanyaji wa GCC 9

  • Chaguo lililoongezwa "-fdiagnostics-format=json", ambayo inaruhusu kutoa matokeo ya uchunguzi katika umbizo linalosomeka kwa mashine (JSON);
  • Imeongeza chaguo mpya za uchakachuaji "-fprofile-filter-files" na "-fprofile-exclude-files" ili kuchagua faili chanzo zitakazochakatwa;
  • AnwaniSanitizer hutoa kizazi cha msimbo wa uthibitishaji wa kompakt zaidi kwa vigezo vya kiotomatiki, ambayo inapunguza matumizi ya kumbukumbu ya faili inayoweza kutekelezwa inayoangaliwa;
  • Pato lililoboreshwa katika "-fopt-maelezoΒ» (maelezo ya kina kuhusu uboreshaji ulioongezwa). Viambishi awali vipya "vilivyoboreshwa" na "vimekosa", pamoja na kiambishi awali kilichopatikana "noti". Kuongeza matokeo ya habari juu ya kufanya maamuzi juu ya ufunuo wa ndani na vekta ya mizunguko;
  • Imeongeza chaguo la "-fsave-optimization-record", inapobainishwa, GCC huhifadhi faili ya SRCFILE.opt-record.json.gz kwa maelezo ya maamuzi kuhusu matumizi ya uboreshaji fulani. Chaguo jipya linatofautiana na hali ya "-fopt-info" kwa kujumuisha metadata ya ziada, kama vile maelezo kuhusu wasifu na minyororo ya ndani;
  • Chaguo zilizoongezwa "-fipa-stack-alignment" na "-fipa-reference-addressable" ili kudhibiti upangaji wa rafu na matumizi ya modi za kushughulikia (kuandika-pekee au kusoma-haswa) kwa vigeuzo tuli wakati wa uboreshaji wa kiutaratibu;
  • Vitendaji vipya vilivyojumuishwa vinaletwa ili kudhibiti ufungaji wa sifa na vile vile tabia inayohusiana na utabiri wa tawi na utekelezaji wa maagizo ya kubahatisha: "__builtin_ina_sifaΒ«,Β«__kujengwa_kutarajia_na_uwezekano"Na"__thamani_salama_ya_kukisia". Sifa mpya imeongezwa kwa vitendakazi, vigeuzo na aina nakala;
  • Usaidizi kamili wa ingizo/tokeo la asynchronous umetekelezwa kwa lugha ya Fortran;
  • Uwezo wa kutumia mifumo ya Solaris 10 (*-*-solaris2.10) na Cell/BE (Cell Broadband Engine SPU) umeacha kutumika na utaondolewa katika toleo kuu lijalo. Usaidizi wa Armv2, Armv3, Armv5 na Armv5E usanifu umekatishwa. Usaidizi wa Intel MPX (Viendelezi vya Ulinzi wa Kumbukumbu) umekatishwa.

Chanzo: opennet.ru

Kuongeza maoni