Ntxiv sim hom ntawm static tsom xam "-fanalyzer", uas ua cov peev txheej-intensive interprocedural tsom xam ntawm txoj cai ua txoj hauv kev thiab cov ntaub ntawv ntws hauv ib qho kev pab cuam. Cov hom muaj peev xwm txheeb xyuas cov teeb meem ntawm lub sijhawm muab tso ua ke, xws li ob npaug hu rau dawb () muaj nuj nqi rau ib cheeb tsam nco, cov ntaub ntawv piav qhia txog kev xau, dereferencing thiab dhau cov pointers tsis muaj, nkag mus rau cov cim xeeb pub dawb, siv cov nqi tsis tsim nyog, thiab lwm yam. Kev siv hom tshiab rau OpenSSL code twb tau ua kom paub meej txaus ntshai vulnerability.
Txhim kho cov txheej txheem kev ua haujlwm zoo. IPA-SRA (Interprocedural Scalar Shared Replacement) pass tau raug kho dua tshiab los ua haujlwm ntawm lub sijhawm khi thiab, ntawm lwm yam, tam sim no tshem tawm cov suav thiab xa rov qab cov nqi tsis siv. Hauv "-O2" hom kev ua kom zoo, qhov "-finline-functions" kev xaiv tau qhib, uas tau hloov kho kom haum rau ntau qhov kev cog lus ntawm kev ua tiav. Kev ua haujlwm ntawm heuristic rau inline muaj nuj nqi xa mus tau nrawm. Inline expansion thiab muaj nuj nqi cloning heuristics tam sim no siv tau cov ntaub ntawv hais txog tus nqi ntau yam los kwv yees cov txiaj ntsig ntawm tus neeg hloov pauv. Rau C ++, qhov tseeb ntawm hom alias parsing tau raug txhim kho.
Txhim kho Lub Sijhawm Txuas Txuas Ntxiv (LTO). Ntxiv tshiab executable lwj-dum rov pib dua cov ntaub ntawv hais txog cov khoom siv nrog LTO bytecode. Parallel LTO dhau los txiav txim siab tus naj npawb ntawm ib txhij ua haujlwm ua haujlwm thiab, yog tias lawv tsis tuaj yeem txiav txim siab, siv cov ntaub ntawv hais txog tus lej ntawm CPU cores raws li qhov sib piv. Ntxiv lub peev xwm los compress LTO bytecode siv zstd algorithm.
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. Txhim kho profile txij nkawm thaum muab tso ua ke thiab kub / txias code sib cais. Ntawm qhov kev xaiv "-fprofile-tus nqiΒ» tam sim no tuaj yeem saib xyuas txog li 4 qhov profile qhov tseem ceeb, piv txwv li kev hu xov tooj tsis ncaj thiab muab cov ntaub ntawv profile meej dua.
Parallel programming specification siv rau C, C ++ thiab Fortran hom lus OpenACC 2.6, uas txhais cov cuab yeej rau kev ua haujlwm offloading ntawm GPUs thiab cov txheej txheem tshwj xeeb xws li NVIDIA PTX. Kev ua raws li tus qauv yuav luag tiav QhibMP 5.0 (Qhib Multi-Processing), uas txhais cov API thiab cov txheej txheem ntawm kev siv cov txheej txheem sib luag ntawm cov tub ntxhais kawm ntau thiab hybrid (CPU + GPU / DSP) cov tshuab nrog kev sib koom nco thiab vectorization units (SIMD). Ntxiv nta xws li lastprivate conditionals, scan thiab voj directives, order thiab use_device_addr expressions. Rau OpenMP thiab OpenACC, kev txhawb nqa tau ntxiv rau kev ua haujlwm offloading ntawm plaub tiam (Fiji) thiab thib tsib tiam AMD Radeon (GCN) GPUs (VEGA 10 / VEGA 20).
Rau cov hom lus ntawm tsev neeg C, qhov "access" muaj nuj nqi tau ntxiv los piav qhia txog txoj haujlwm nkag mus rau cov khoom dhau los ntawm kev siv lossis tus taw tes, thiab koom nrog cov khoom zoo li no nrog cov lus tsis sib xws uas muaj cov ntaub ntawv hais txog qhov loj ntawm cov khoom. Txhawm rau ua haujlwm nrog "kev nkag mus", "hom" tus cwj pwm yog siv los txheeb xyuas kev nkag tsis raug los ntawm cov neeg siv lub luag haujlwm, piv txwv li, thaum sau cov txiaj ntsig rau thaj tsam sab nraud ntawm thaj tsam ntawm array. Tsis tas li ntxiv yog "symver" tus cwj pwm rau cov cim sib koom ua ke hauv ELF cov ntaub ntawv nrog cov lej tshwj xeeb.
Lub neej ntawd hom rau C yog "-fno-common", uas tso cai rau kev nkag mus tau zoo dua rau lub ntiaj teb hloov pauv ntawm qee lub platform.
Rau C ++, txog 16 qhov kev hloov pauv thiab kev tsim kho tshiab tau raug coj los siv, tsim hauv C ++ 20 tus qauv. Ntxiv nrog rau lo lus tseem ceeb ntxiv "constinit"
thiab kev txhawb nqa rau template extensions tau siv "tswvyim". Cov tswv yim tso cai rau koj los txheeb xyuas cov txheej txheem template uas yuav tsum tau ua, thaum lub sijhawm sib sau, txwv cov txheej txheem sib cav uas tuaj yeem lees txais raws li cov qauv ntsuas. Cov tswv yim tuaj yeem siv los tiv thaiv kev tsis sib haum xeeb ntawm cov khoom ntawm cov ntaub ntawv hom siv nyob rau hauv cov qauv thiab cov ntaub ntawv hom khoom ntawm cov input tsis.
G ++ muab kev tshawb pom ntawm tus cwj pwm tsis tau hais los ntawm kev hloov cov khoom tsis tu ncua los ntawm constexpr. Txo kev nco noj los ntawm lub compiler thaum xam constexpr. Ntxiv cov lus ceeb toom tshiab "-Wmismatched-tags" thiab "-Wredundant-tags".
Cov kev xaiv kab hais kom ua tshiab tau raug npaj: