Ntxiv kev txhawb nqa rau D programming lus GDC (Gnu D Compiler) thiab runtime qiv (libphobos), uas tso cai rau koj siv tus qauv GCC los tsim cov kev pab cuam hauv D programming lus. tau pib rov qab rau xyoo 2011, tab sis luag rau vim qhov yuav tsum tau coj cov cai ua raws li GCC cov cai thiab cov teeb meem nrog rau kev hloov pauv ntawm cov tswv cuab kev txawj ntse rau Digital Mars, uas tab tom tsim D programming lus;
Kev txhim kho tau ua rau lub tshuab hluav taws xob code. Piv txwv li, kev siv cov tswv yim sib txawv rau kev nthuav dav Hloov cov kab lus (dhia lub rooj, ntsuas me ntsis, tsob ntoo txiav txim siab) nyob ntawm qhov xwm txheej tau ua tiav. Ntxiv lub peev xwm los hloov txoj haujlwm uas suav nrog Hloov cov lus qhia siv qhov "-ftree-hloov-hloov" kev ua kom zoo (piv txwv li, cov xwm txheej zoo li "case 2: li cas = 205; tawg; case 3: li cas = 305; tawg ;β yuav hloov mus rau "100 * li cas + 5";
Kev ua kom zoo dua qub raws li cov txiaj ntsig ntawm cov lej profile (PGO - Profile-guided optimization) tau raug txhim kho, uas ua kom muaj txiaj ntsig zoo dua raws li kev txheeb xyuas ntawm cov yam ntxwv ntawm kev ua tiav code. Summary Option "-fprofile-siv" tam sim no suav nrog cov kev ua kom zoo dua "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" thiab "-ftree-loop-distribution". Tshem tawm qhov suav nrog histograms nrog cov txee hauv cov ntaub ntawv, uas txo qhov loj ntawm cov ntaub ntawv nrog cov ntaub ntawv (histograms tam sim no tsim tawm ntawm ya thaum ua kom zoo dua thaum sib txuas);
Txhim kho Lub Sijhawm Txuas Txuas Ntxiv (LTO). Kev ua kom yooj yim ntawm cov hom tau muab ua ntej tsim qhov tshwm sim, uas ua rau nws ua tau kom txo qhov loj ntawm LTO cov ntaub ntawv cov khoom, txo kev nco noj nyob rau theem khi, thiab txhim kho kev ua haujlwm sib luag. Tus naj npawb ntawm partitions (-param lto-partitions) tau nce los ntawm 32 mus rau 128, uas txhim kho kev ua haujlwm ntawm cov tshuab nrog ntau cov xov tooj CPU. Ib qho parameter tau ntxiv los tswj tus naj npawb ntawm cov txheej txheem optimizer
"-param lto-max-streaming-parallelism";
Raws li qhov tshwm sim, piv rau GCC 8.3, qhov kev ua kom zoo tshaj plaws tau qhia hauv GCC 9 tso cai txo lub sij hawm muab tso ua ke ntawm Firefox 5 thiab LibreOffice 66 li ntawm 6.2.3%. Qhov loj ntawm cov khoom cov ntaub ntawv poob los ntawm 7%. Lub sijhawm khi ntawm 8-core CPU poob los ntawm 11%. Qhov kev ua kom zoo raws qib theem ntawm kev sib txuas yog tam sim no 28% sai dua thiab siv 20% nco tsawg dua. Nco noj ntawm txhua tus processor ntawm theem parallelized ntawm LTO txo los ntawm 30%;
Feem ntau ntawm cov lus qhia sib txuas ua ke yog siv rau C, C ++ thiab Fortran hom lus OpenACC 2.5, uas txhais cov cuab yeej rau kev ua haujlwm offloading ntawm GPUs thiab cov txheej txheem tshwj xeeb xws li NVIDIA PTX;
Kev txhawb nqa ib nrab rau tus qauv tau ua tiav rau C thiab C ++ QhibMP 5.0 (Qhib Multi-Processing), uas txhais cov API thiab cov txheej txheem ntawm kev siv cov txheej txheem sib luag rau cov lus C, C ++ thiab Fortran ntawm ntau cov tub ntxhais thiab hybrid (CPU + GPU / DSP) cov tshuab nrog kev sib koom nco thiab vectorization units (SIMD) ;
Cov lus ceeb toom tshiab tau ntxiv rau hom C: "-Waddress-of-packed-tus tswv cuab" (unaligned pointer tus nqi rau ib tus tswv cuab ntawm cov qauv lossis lub koomhaum) thiab
Β«-Wabsolute-tus nqi" (thaum nkag mus rau kev ua haujlwm rau kev suav tus nqi tiag tiag, yog tias muaj kev ua haujlwm tsim nyog rau cov lus sib cav, piv txwv li, fabs(3.14) yuav tsum siv tsis yog abs(3.14). Cov lus ceeb toom tshiab ntxiv rau C ++: "-Wdeprecated-copy",
"-Winit-list-lifetime", "-Wredundant-tsav", "-Wpessimizing-tsav" thiab "-Wclass-conversion". Ntau cov lus ceeb toom yav dhau los tau nthuav dav;
Ntxiv kev sim txhawb rau ib feem ntawm yav tom ntej C hom lus, codenamed C2x. Txhawm rau pab txhawb C2x, siv cov kev xaiv "-std = c2x" thiab "-std = gnu2x" (kom pab txhawb GNU txuas ntxiv). Tus qauv tseem nyob rau theem pib ntawm txoj kev loj hlob, yog li ntawd, ntawm nws lub peev xwm, tsuas yog cov lus qhia _Static_assert nrog ib qho kev sib cav tau txais kev txhawb nqa (_Static_assert nrog ob qhov kev sib cav yog tus qauv hauv C11);
Kev them nyiaj yug rau C ++ 17 tus qauv tau tshaj tawm tias ruaj khov. Nyob rau hauv pem hauv ntej, cov lus muaj peev xwm ntawm C ++ 17 tau ua tiav tag nrho, thiab hauv libstdc ++, lub tsev qiv ntawv ua haujlwm tau teev tseg hauv tus qauv yog ze rau kev siv tag nrho;
Txuas ntxiv kev paub cov ntsiab lus ntawm yav tom ntej C ++ 2a tus qauv. Piv txwv li, muaj peev xwm suav nrog ntau yam thaum pib pib tau ntxiv, txuas ntxiv rau lambda kab lus tau siv, kev txhawb nqa rau cov tswv cuab khoob ntawm cov ntaub ntawv cov qauv thiab cov cwj pwm zoo / tsis zoo tau raug ntxiv, muaj peev xwm hu rau cov haujlwm virtual hauv cov lus qhia tau muab. , lwm.
Txhawm rau pab txhawb C ++ 2a, siv qhov "-std = c ++ 2a" thiab "-std = gnu ++ 2a" kev xaiv. Ntxiv me ntsis thiab version header cov ntaub ntawv rau libstdc ++ rau C ++ 2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible thiab std::type_identity traits, std::midpoint, std::lerp functions , std::ib_front,
std::visit, std::is_constant_evaluated thiab std:: assume_aligned, ntxiv kev txhawb nqa rau hom char8_t, siv lub peev xwm los xyuas cov lus ua ntej thiab cov lus xaus ntawm cov hlua (starts_with, ends_with);
Ntxiv backend rau processors C-SKY V2, ua los ntawm Suav tuam txhab ntawm tib lub npe rau ntau yam khoom siv;
Tag nrho cov kev xaiv kab hais kom ua uas ua haujlwm byte qhov tseem ceeb txhawb cov lus kawg kb, KiB, MB, MiB, GB thiab GiB;
Ua tiav qhov "-flive-patching = [inline-only-static|inline-clone]" kev xaiv tso cai rau koj kom ua tiav kev sib sau ua ke rau kev nyob-patching systems vim muaj ntau theem tswj kev siv cov txheej txheem sib txuas (IPA) optimizations;