Hoʻokuʻu ʻia ka GCC 9 compiler suite

Ma hope o hoʻokahi makahiki o ka hoʻomohala ʻana i paʻiʻia hoʻokuʻu ʻana i kahi pūʻulu manuahi o nā mea hoʻohui GCC 9.1, ka hoʻokuʻu nui mua ma ka lālā GCC 9.x hou. I kulike ai me hoʻolālā hou Ua hoʻohana ʻia nā helu hoʻokuʻu, version 9.0 i ka wā o ka hoʻomohala ʻana, a ma mua koke o ka hoʻokuʻu ʻia ʻana o GCC 9.1, ua hoʻomaka mua ka lālā GCC 10.0, ma ke kumu e hoʻokumu ʻia ai ka hoʻokuʻu nui hou, GCC 10.1.

He mea kaulana ʻo GCC 9.1 no ka hoʻokūpaʻa ʻana i ke kākoʻo no ka maʻamau C ++ 17, e hoʻomau ana i ka hoʻokō ʻana i nā mana o ka maʻamau C ++ 20 e hiki mai ana (codenamed C ++ 2a), hoʻokomo i ka ʻaoʻao mua no ka ʻōlelo D, kākoʻo hapa no OpenMP 5.0 , kokoke piha i ke kākoʻo no OpenACC 2.5, e hoʻonui i ka scalability o interprocedural optimizations a me ka optimizations ma ke kahua paʻa, hoʻonui i nā mea hana diagnostic a me ka hoʻohui ʻana i nā ʻōlelo aʻo hou, backends no OpenRISC, C-SKY V2 a me AMD GCN GPU.

ka papa kuhikuhiE ke hoʻololi:

  • Kākoʻo hoʻohui ʻia no ka ʻōlelo hoʻolālā D. Loaʻa iā GCC kahi ʻaoʻao mua me kahi mea hoʻopili GDC (Gnu D Compiler) a me nā hale waihona puke holo manawa (libphobos), e ʻae iā ʻoe e hoʻohana i ka GCC maʻamau e kūkulu i nā papahana ma ka ʻōlelo papahana D. ʻO ke kaʻina hana e hiki ai i ke kākoʻo ʻōlelo D ma GCC ua hoomaka hoʻi i ka makahiki 2011, akā kauo ia ma muli o ka pono e lawe i ke code i ka hoʻokō ʻana i nā koi GCC a me nā pilikia me ka hoʻoili ʻana o nā kuleana waiwai naʻauao iā Digital Mars, e hoʻomohala nei i ka ʻōlelo papahana D;
  • Ua hoʻomaikaʻi ʻia ka mea hana code. No ka laʻana, ua hoʻokō ʻia ka hoʻohana ʻana i nā hoʻolālā like ʻole no ka hoʻonui ʻana i nā ʻōlelo Switch (lele papa, bit test, hoʻoholo lāʻau) ma muli o nā kūlana. Hoʻohui i ka hiki ke hoʻololi i nā hana laina e komo ana i kahi ʻōlelo Switch me ka hoʻohana ʻana i ka "-ftree-switch-conversion" optimization (no ka laʻana, kahi hoʻonohonoho o nā kūlana e like me "kahiki 2: pehea = 205; haki; hihia 3: pehea = 305; haʻihaʻi." ;” e hoʻololi ʻia i "100 * pehea + 5";
  • Hoʻomaikaʻi ʻia nā loiloi interprocedural. Ua hoʻololi ʻia nā hoʻonohonoho hoʻonohonoho inline no nā codebase C ++ hou a hoʻonui ʻia me nā palena hou max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns a me uninlined. -mana-manawa. Hoʻomaikaʻi i ka pololei a me ka ikaika o ka hoʻokaʻawale code anu/wela. Hoʻonui i ka scalability no ka nui loa ʻāpana unuhi (no ka laʻana, i ka hoʻohana ʻana i ka loiloi ma ka pae hoʻopili i nā papahana nui);
  • Ua hoʻomaikaʻi ʻia ka mīkini hoʻoponopono e pili ana i nā hopena o ka code profiling (PGO - Profile-guided optimization), kahi e hoʻopuka ai i nā code ʻoi aku ka maikaʻi ma muli o ka nānā ʻana i nā ʻano o ka hoʻokō code. koho hōʻuluʻulu "-fprofile-hoʻohana"I kēia manawa ua komo nā ʻano hoʻolālā "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" a me "-ftree-loop-distribution". Wehe ʻia ka hoʻokomo ʻana o nā histograms me nā helu helu i nā faila, i hōʻemi i ka nui o nā faila me nā profiles (ua hana ʻia nā histograms ma ka lele i ka wā e hana ana i nā optimizations i ka wā e hoʻopili ai);
  • Hoʻonui ʻia ka hoʻopili ʻana i ka manawa (LTO). Hāʻawi ʻia ka maʻalahi o nā ʻano ma mua o ka hana ʻana i ka hopena, i hiki ai ke hōʻemi nui i ka nui o nā faila mea LTO, hoʻemi i ka hoʻohana ʻana i ka hoʻomanaʻo ma ka pae paʻa, a hoʻomaikaʻi i ka parallelization o nā hana. Ua hoʻonui ʻia ka helu o nā ʻāpana (-param lto-partitions) mai 32 a 128, e hoʻomaikaʻi ana i ka hana ma nā ʻōnaehana me ka nui o nā kaula CPU. Ua hoʻohui ʻia kahi ʻāpana e hoʻomalu i ka helu o nā kaʻina hana optimizer
    "-param lto-max-streaming-parallelism";

    ʻO ka hopena, i hoʻohālikelike ʻia me GCC 8.3, ua hoʻokomo ʻia nā optimizations ma GCC 9 ʻae ʻia e hoemi i ka manawa hui o Firefox 5 a me LibreOffice 66 ma kahi o 6.2.3%. Ua emi ka nui o nā faila mea e 7%. ʻO ka manawa paʻa ma kahi CPU 8-core i hoʻemi ʻia e 11%. He 28% ka wikiwiki o ke kaʻina hoʻoponopono o ka pae hoʻohui a hoʻopau i ka hoʻomanaʻo he 20%. Hoʻemi ʻia ka hoʻohana ʻana i ka hoʻomanaʻo o kēlā me kēia kaʻina hana o ka pae like o LTO e 30%;

  • Hoʻokō ʻia ka hapa nui o nā kikoʻī hoʻolālā like no C, C ++ a me Fortran OpenACC 2.5, e wehewehe ana i nā mea hana no ka hoʻokuʻu ʻana i nā hana ma nā GPU a me nā mea hana kūikawā e like me NVIDIA PTX;
  • Ua hoʻokō ʻia ke kākoʻo hapa no ka maʻamau no C a me C++ E wehe i ka MP 5.0 (Open Multi-Processing), ka mea i wehewehe i ka API a me nā ʻano o ka hoʻohana ʻana i nā ʻano papahana like ʻole no nā ʻōlelo C, C ++ a me Fortran ma nā ʻōnaehana multi-core a hybrid (CPU+GPU/DSP) me ka hoʻomanaʻo like ʻana a me nā ʻāpana vectorization (SIMD) ;
  • Ua hoʻohui ʻia nā ʻōlelo aʻo hou no ka ʻōlelo C: "-Waddress-of-packed-lālā" (waiwai kuhikuhi ʻole i kahi lālā paʻa o kahi hale a i ʻole uniona) a
    «-Waabsolute-waiwai" (i ke komo ʻana i nā hana no ka helu ʻana i kahi waiwai kūʻokoʻa, inā aia kahi hana kūpono no ka hoʻopaʻapaʻa i ʻōlelo ʻia, no ka laʻana, pono e hoʻohana ʻia nā fabs(3.14) ma kahi o abs(3.14). Hoʻohui ʻia nā ʻōlelo aʻo hou no C++: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" a me "-Wclass-conversion". Nui nā ʻōlelo aʻo i loaʻa mua i hoʻonui ʻia;

  • Hoʻohui ʻia ke kākoʻo hoʻokolohua no ka ʻāpana o ka maʻamau ʻōlelo C e hiki mai ana, codenamed C2x. No ke kākoʻo ʻana iā C2x, e hoʻohana i nā koho "-std=c2x" a me "-std=gnu2x" (e hiki ai i nā hoʻonui GNU). Aia ka maʻamau i ka wā mua o ka hoʻomohala ʻana, no laila, ʻo kona hiki ke kākoʻo ʻia ka ʻōlelo _Static_assert me hoʻokahi manaʻo (_Static_assert me ʻelua mau manaʻo i hoʻohālikelike ʻia ma C11);
  • Ua hōʻike ʻia ke kākoʻo no ka maʻamau C++17. Ma ka mua, ua hoʻokō piha ʻia nā mana ʻōlelo o C ++ 17, a ma libstdc ++, nā hana waihona i wehewehe ʻia i ka maʻamau e kokoke ana i ka hoʻokō piha;
  • Hoʻomau ʻia hoʻokō nā mea o ka maʻamau C++2a e hiki mai ana. No ka laʻana, ua hoʻohui ʻia ka hiki ke hoʻokomo i nā pae i ka wā o ka hoʻomaka ʻana, ua hoʻokō ʻia nā hoʻonui no nā hōʻike lambda, kākoʻo no nā lālā ʻole o nā hale ʻikepili a ua hoʻohui ʻia nā ʻano like ʻole, ua hāʻawi ʻia ka hiki ke kāhea i nā hana virtual i nā ʻōlelo kūlana. , etc.
    No ke kākoʻo ʻana iā C++2a, e hoʻohana i nā koho "-std=c++2a" a me "-std=gnu++2a". Hoʻohui ʻia nā faila poʻomanaʻo bit a me ka mana i ka libstdc++ no C++ 2a, std ::remove_cvref, std :: unwrap_reference, std :: unwrap_decay_ref, std :: is_nothrow_convertible a me std :: type_identity traits, std :: midpoint, std:: , std::bind_front,
    std :: kipa, std :: is_constant_evaluated a std :: assume_aligned, hoʻohui i ke kākoʻo no ke ʻano char8_t, hoʻokō i ka hiki ke nānā i ka prefix a me ka suffix o nā kaula (starts_with, ends_with);

  • Hoʻohui i ke kākoʻo no nā mea hana ARM hou
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ nui.LITTLE a me Neoverse N1. Hoʻohui kākoʻo no nā ʻōlelo aʻo i hoʻokomo ʻia ma Armv8.3-A no ka hana ʻana me nā helu paʻakikī, pseudo-random number generation (rng) a me ka hoʻomanaʻo ʻana (memtag), a me nā ʻōlelo aʻoaʻo no ka pale ʻana i nā hoʻouka ʻana e pili ana i ka hoʻokō speculative a me ka hana o ka ʻāpana wānana lālā. . No ka hoʻolālā AArch64, ua hoʻohui ʻia kahi ʻano pale nā hui o ka ahu a me ka puʻu (“-fstack-clash-protection”). No ka hoʻohana ʻana i nā hiʻohiʻona o ka hoʻolālā Armv8.5-A, ua hoʻohui ʻia ke koho "-march=armv8.5-a"

  • Loaʻa iā ia kahi backend no ka hana ʻana i nā code no AMD GPU e pili ana i ka microarchitecture GCN. Hoʻopili ʻia ka hoʻokō ʻana i kēia manawa i ka hui ʻana o nā noi hoʻokahi-threaded (kākoʻo no ka lawe ʻana i nā helu helu multi-threaded ma OpenMP a OpenACC e hāʻawi ʻia ma hope) a me ke kākoʻo no GPU Fiji a me Vega 10;
  • Hoʻohui hou i hope no nā mea hana OpenRISC;
  • Hoʻohui ʻia i hope no nā mea hana C-SKY V2, hana ʻia e ka hui Kina o ka inoa like no nā mea kūʻai like ʻole;
  • Kākoʻo nā koho laina kauoha āpau e hana i nā waiwai byte i nā suffixes kb, KiB, MB, MiB, GB a me GiB;
  • Hoʻokō ʻia ʻO ka koho "-flive-patching=[inline-only-static|inline-clone]" hiki iā ʻoe ke hoʻokō i ka hoʻopili palekana no nā ʻōnaehana live-patching ma muli o ka mana multi-level ma luna o ka hoʻohana ʻana i ka interprocedural (ipa) nā hoʻolālā;
  • Hoʻohui ʻia ke koho "--completion" no ka mana maikaʻi o ka hoʻopau ʻana i ke koho i ka wā e hoʻohana ai i ka bash;
  • Hāʻawi nā mea hana diagnostic i nā hōʻike o nā ʻāpana kikokikona kumu e hōʻike ana i ka helu laina a me ka mākaʻikaʻi ʻana i ka ʻike pili, e like me nā ʻano operand. No ka hoʻopauʻana i ka hōʻikeʻana i nā helu laina a me nā lepili, ua hāʻawiʻia nā koho "-fno-diagnostics-show-line-numbers" a me "-fno-diagnostics-show-labels";

    Hoʻokuʻu ʻia ka GCC 9 compiler suite

  • Hoʻonui ʻia nā mea hana no ka ʻike ʻana i nā hewa i ka code C ++, hoʻomaikaʻi i ka heluhelu ʻana o ka ʻike e pili ana i nā kumu o nā hewa a me ka hōʻike ʻana i nā ʻāpana pilikia;

    Hoʻokuʻu ʻia ka GCC 9 compiler suite

  • Hoʻohui ʻia ke koho "-fdiagnostics-format = json", e ʻae ai i ka hana ʻana i ka hoʻopuka diagnostic i ka mīkini hiki ke heluhelu ʻia (JSON);
  • Hoʻohui hou i nā koho profiling hou "-fprofile-filter-files" a me "-fprofile-exclude-files" e koho i nā faila kumu e hana ʻia;
  • Hāʻawi ʻo AddressSanitizer i ka hoʻokumu ʻana i nā code hōʻoia ʻoi aku ka paʻakikī no nā loli maʻalahi, e hōʻemi ana i ka hoʻohana ʻana i ka hoʻomanaʻo o ka faila hiki ke nānā ʻia;
  • Hoʻonui ʻia ka hoʻopuka ma "-fopt-info» (ʻike kikoʻī e pili ana i ka hoʻonui ʻia ʻana). Hoʻohui i nā prefix hou "optimized" a "nalo", me ka hoʻohui i ka prefix i loaʻa mua "note". Hoʻohui i ka ʻike e pili ana i ka hoʻoholo ʻana i ka wehe ʻana i ka laina a me ka vectorization o nā pōʻai;
  • Hoʻohui ʻia ke koho "-fsave-optimization-record", i ka wā i kuhikuhi ʻia, mālama ʻo GCC i ka faila SRCFILE.opt-record.json.gz me ka wehewehe ʻana i nā hoʻoholo no ka hoʻohana ʻana i kekahi mau koho. ʻOkoʻa ka koho hou mai ke ʻano "-fopt-info" me ka hoʻokomo ʻana i nā metadata hou, e like me ka ʻike e pili ana i ka ʻaoʻao a me nā kaulahao inline;
  • Hoʻohui ʻia nā koho "-fipa-stack-alignment" a me "-fipa-reference-addressable" e hoʻomalu i ka hoʻonohonoho hoʻonohonoho ʻana a me ka hoʻohana ʻana i nā ʻano ʻōlelo (kākau-wale a heluhelu-pololei) no nā ʻano hoʻololi static i ka wā o ka optimizations interprocedural;
  • Hoʻokomo ʻia nā hana hou i kūkulu ʻia e kaohi i ka hoʻopaʻa ʻana i nā ʻano a me nā ʻano e pili ana i ka wānana lālā a me ka hoʻokō ʻana i ke aʻo speculative: "__kūkulu_ua_ʻano«,«__kūkulu_manaʻo_me_ke_probability"A"__builtin_speculation_safe_value". Ua hoʻohui ʻia kahi ʻano hou no nā hana, nā ʻano a me nā ʻano kope;
  • Ua hoʻokō ʻia ke kākoʻo piha no ka hoʻokomo asynchronous/output no ka ʻōlelo Fortran;
  • Ua hoʻopau ʻia ke kākoʻo no Solaris 10 (*-*-solaris2.10) a me Cell/BE (Cell Broadband Engine SPU) a e hoʻoneʻe ʻia i ka hoʻokuʻu nui e hiki mai ana. Ua hoʻopau ʻia ke kākoʻo no Armv2, Armv3, Armv5 a me Armv5E. Ua hoʻopau ʻia ke kākoʻo no Intel MPX (Memory Protection Extensions).

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka