XNUMX幎éã®éçºãçµãŠ
GCC 9.1 ã¯ãC++17 æšæºã®ãµããŒãã®å®å®åãå°æ¥ã® C++20 æšæº (ã³ãŒãå C++2a) ã®æ©èœã®å®è£ ã®ç¶ç¶ãD èšèªã®ããã³ããšã³ããžã®çµã¿èŸŒã¿ãOpenMP 5.0 ã®éšåãµããŒãã§æ³šç®ã«å€ããŸãã ãOpenACC 2.5ã®ã»ãŒå®å šãªãµããŒããããã·ãŒãžã£éã®æé©åãšãã€ã³ãã£ã³ã°æ®µéã§ã®æé©åã®ã¹ã±ãŒã©ããªãã£ã®åäžã蚺æããŒã«ã®æ¡åŒµãšæ°ããèŠåã®è¿œå ãOpenRISCãC-SKY V2ãããã³AMD GCN GPUã®ããã¯ãšã³ãã
ã¡ã€ã³
- D ããã°ã©ãã³ã°èšèªã®ãµããŒããè¿œå ããŸãããGCC ã«ã¯ã³ã³ãã€ã©ãåããããã³ããšã³ããå«ãŸããŠããŸã
GDC (Gnu D Compiler) ãšã©ã³ã¿ã€ã ã©ã€ãã©ãª (libphobos) ã䜿çšãããšãæšæº GCC ã䜿çšã㊠D ããã°ã©ãã³ã°èšèªã§ããã°ã©ã ãæ§ç¯ã§ããŸããGCC 㧠D èšèªãµããŒããæå¹ã«ããããã»ã¹å§ãŸã£ã 2011幎ã«é¡ããŸãããåŒããããã ã³ãŒãã GCC èŠä»¶ã«æºæ ãããå¿ èŠãããããšãšãD ããã°ã©ãã³ã°èšèªãéçºããŠãã Digital Mars ãžã®ç¥ç財ç£æš©ã®è²æž¡ã«é¢ããåé¡ã®ããã - ã³ãŒããžã§ãã¬ãŒã¿ãŒãæ¹è¯ãããŸããã ããšãã°ãç¶æ³ã«å¿ã㊠Switch åŒãæ¡åŒµããããã®ããŸããŸãªæŠç¥ (ãžã£ã³ã ããŒãã«ãããã ãã¹ãããã·ãžã§ã³ ããªãŒ) ã®äœ¿çšãå®è£ ãããŠããŸãã ã-ftree-switch-conversionãæé©åã䜿çšããŠãSwitch åŒãå«ãç·åœ¢é¢æ°ãå€æããæ©èœãè¿œå ããŸãã (ããšãã°ããcase 2: how = 205; Break; case 3: how = 305; Breakãã®ãããªäžé£ã®æ¡ä»¶) ;ãã¯ã100 * how + 5ãã«å€æãããŸãã
- ããã·ãŒãžã£éã®æé©åãæ¹åãããŸããã ã€ã³ã©ã€ã³å±éèšå®ã¯ææ°ã® C++ ã³ãŒãããŒã¹ã«é©åããæ°ãããã©ã¡ãŒã¿ãŒ max-inline-insns-smallãmax-inline-insns-sizeãuninlined-function-insnsãuninlined-function-timeãuninlined-thunk-insnsãuninlined ã§æ¡åŒµãããŸããã -ãµã³ã¯ã¿ã€ã ã ã³ãŒã«ã/ãããã³ãŒãåé¢ã®ç²ŸåºŠãšç©æ¥µæ§ãåäžããŸããã éåžžã«å€§èŠæš¡ãªã·ã¹ãã åãã®ã¹ã±ãŒã©ããªãã£ã®åäž
翻蚳åäœ (ããšãã°ã倧èŠæš¡ãªããã°ã©ã ã®ãªã³ã¯æ®µéã§æé©åãé©çšããå Žå)ã - ã³ãŒããããã¡ã€ãªã³ã°ã®çµæã«åºã¥ãæé©åã¡ã«ããºã (PGO - ãããã¡ã€ã«ã¬ã€ãä»ãæé©å) ãæ¹åãããã³ãŒãå®è¡ã®ç¹æ§ã®åæã«åºã¥ããŠããæé©ãªã³ãŒããçæãããŸãã æŠèŠãªãã·ã§ã³ã
-fprofile-äœ¿çš " ã«ã¯ãæé©åã¢ãŒã "-fversion-loops-for-strides"ã"-floop-interchange"ã"-floop-unroll-and-jam"ãããã³ "-ftree-loop-distribution" ãå«ãŸããããã«ãªããŸããã ãã¡ã€ã«å ã®ã«ãŠã³ã¿ãŒãå«ããã¹ãã°ã©ã ã®çµã¿èŸŒã¿ãåé€ããŸãããããã«ããããããã¡ã€ã«ãå«ããã¡ã€ã«ã®ãµã€ãºãåæžãããŸãã (ãã¹ãã°ã©ã ã¯ããªã³ã¯äžã«æé©åãå®è¡ãããšãã«ãªã³ã¶ãã©ã€ã§çæãããããã«ãªããŸãã)ã - 匷åããããªã³ã¯æéã®æé©å (LTO)ã çµæãçæããåã«åãç°¡çŽ åããããããLTO ãªããžã§ã¯ã ãã¡ã€ã«ã®ãµã€ãºã倧å¹
ã«åæžããããã€ã³ãã£ã³ã°æ®µéã§ã®ã¡ã¢ãªæ¶è²»ãåæžãããæŒç®ã®äžŠååãåäžããŸããã ããŒãã£ã·ã§ã³ã®æ° (-param lto-partitions) ã 32 ãã 128 ã«å¢å ããå€æ°ã® CPU ã¹ã¬ãããåããã·ã¹ãã ã®ããã©ãŒãã³ã¹ãåäžããŸããã ãªããã£ãã€ã¶ãŒããã»ã¹ã®æ°ãå¶åŸ¡ãããã©ã¡ãŒã¿ãŒãè¿œå ãããŸãã
"-param lto-max-streaming-Parallelism";ãã®çµæãGCC 8.3 ãšæ¯èŒããŠãGCC 9 ã§å°å ¥ãããæé©åã¯
èš±å¯ããã Firefox 5 ãš LibreOffice 66 ã®ã³ã³ãã€ã«æéãçŽ 6.2.3% ççž®ããŸãã ãªããžã§ã¯ã ãã¡ã€ã«ã®ãµã€ãºã¯ 7% æžå°ããŸããã 8 ã³ã¢ CPU ã§ã®ãã€ã³ãæé㯠11% æžå°ããŸããã ãªã³ã¯ ã¹ããŒãžã®é 次æé©åã¹ããŒãžã¯ 28% é«éã«ãªããã¡ã¢ãªæ¶è²»éã 20% åæžãããŸããã LTO ã®äžŠåã¹ããŒãžã®åããã»ããµã®ã¡ã¢ãªæ¶è²»é㯠30% æžå°ããŸããã - 䞊åããã°ã©ãã³ã°ä»æ§ã®ã»ãšãã©ã¯ãCãC++ãããã³ Fortran èšèªã«å®è£
ãããŠããŸãã
OpenACC 2.5 ãGPU ããã³ NVIDIA PTX ãªã©ã®ç¹æ®ãªããã»ããµäžã§æäœããªãããŒãããããã®ããŒã«ãå®çŸ©ããŸãã - æšæºã®éšåçãªãµããŒãã C ããã³ C++ ã«å®è£
ãããŸããã
MP5.0ãéããŸã (Open Multi-Processing)ãå ±æã¡ã¢ãªããã³ãã¯ãã«åãŠããã (SIMD) ãåãããã«ãã³ã¢ããã³ãã€ããªãã (CPU+GPU/DSP) ã·ã¹ãã äžã§ CãC++ãããã³ Fortran èšèªã®äžŠåããã°ã©ãã³ã°ææ³ãé©çšãã API ãšææ³ãå®çŸ©ããŸãã ; - C èšèªã«é¢ããæ°ããèŠåãè¿œå ãããŸãã:
-ããã¯ã¡ã³ããŒã®ã¢ãã¬ã¹ " (æ§é äœãŸãã¯å ±çšäœã®ããã¯ãããã¡ã³ããŒãžã®äœçœ®åãããããŠããªããã€ã³ã¿ãŒå€) ããã³
«-çµ¶å¯Ÿå€ (絶察å€ãèšç®ããé¢æ°ã«ã¢ã¯ã»ã¹ããå Žåãæå®ãããåŒæ°ã«å¯ŸããŠããé©åãªé¢æ°ãããå Žåã¯ãããšãã°ãabs(3.14) ã®ä»£ããã« fabs(3.14) ã䜿çšããå¿ èŠããããŸãã C++ çšã«è¿œå ãããæ°ããèŠå: "-Wdeprecated-copy"ã
ã-Winit-list-lifetimeããã-Wredundant-moveããã-Wpessimizing-moveããããã³ã-Wclass-conversionãã 以åã«å©çšå¯èœã ã£ãèŠåã®å€ããæ¡åŒµãããŸããã - å°æ¥ã® C èšèªæšæº (ã³ãŒãå C2x) ã®äžéšã«å¯Ÿããå®éšçãªãµããŒããè¿œå ãããŸããã C2x ãµããŒããæå¹ã«ããã«ã¯ããªãã·ã§ã³ã-std=c2xãããã³ã-std=gnu2xã(GNU æ¡åŒµæ©èœãæå¹ã«ãããã) ã䜿çšããŸãã ãã®æšæºã¯ãŸã éçºã®åæ段éã«ããããããã®æ©èœã®ãã¡ã11 ã€ã®åŒæ°ãæã€åŒ _Static_assert ã®ã¿ããµããŒããããŠããŸã (XNUMX ã€ã®åŒæ°ãæ〠_Static_assert 㯠CXNUMX ã§æšæºåãããŠããŸã)ã
- C++17 æšæºã®ãµããŒãã¯å®å®ããŠãããšå®£èšãããŠããŸãã ããã³ããšã³ãã§ã¯ãC++17 ã®èšèªæ©èœãå®å šã«å®è£ ãããŠãããlibstdc++ ã§ã¯ãæšæºã§å®çŸ©ãããŠããã©ã€ãã©ãªé¢æ°ãå®å šã«å®è£ ãããŠããŸãã
- ç¶ã
å®è£ å°æ¥ã® C++2a æšæºã®èŠçŽ ã ããšãã°ãåæåäžã«ç¯å²ãå«ããæ©èœãè¿œå ãããã©ã ãåŒã®æ¡åŒµæ©èœãå®è£ ãããããŒã¿æ§é ã®ç©ºã®ã¡ã³ããŒãšå¯èœæ§ã®é«ã/å¯èœæ§ã®äœãå±æ§ã®ãµããŒããè¿œå ãããæ¡ä»¶åŒã§ä»®æ³é¢æ°ãåŒã³åºãæ©èœãæäŸãããŠããŸãã ããªã©ã
C++2a ãµããŒããæå¹ã«ããã«ã¯ãã-std=c++2aãããã³ã-std=gnu++2aããªãã·ã§ã³ã䜿çšããŸãã C++2aãstd::remove_cvrefãstd::unwrap_referenceãstd::unwrap_decay_refãstd::is_nothrow_convertible ããã³ std::type_identity ç¹æ§ãstd::midpointãstd::lerp é¢æ°ã® libstdc++ ã«ãããããã³ããŒãžã§ã³ ããã㌠ãã¡ã€ã«ãè¿œå ããŸããã ãstd::bind_frontã
std::visitãstd::is_constant_evaluatedãstd::assume_aligned ã§ã¯ãchar8_t åã®ãµããŒããè¿œå ãããæååã®æ¥é èŸãšæ¥å°ŸèŸ (starts_withãends_with) ããã§ãã¯ããæ©èœãå®è£ ãããŸããã - æ°ãã ARM ããã»ããµã®ãµããŒããè¿œå
Cortex-A76ãCortex-A55ãCortex-A76 DynamIQ big.LITTLEãããã³ Neoverse N1ã Armv8.3-A ã§å°å ¥ãããè€çŽ æ°ãæ¬äŒŒä¹±æ°çæ (rng)ãã¡ã¢ãªã¿ã°ä»ã (memtag) ãæ±ãåœä»€ãããã³ææ©çå®è¡ãšåå²äºæž¬ãŠãããã®æäœã«é¢é£ããæ»æããããã¯ããåœä»€ã®ãµããŒããè¿œå ããŸããã ã AArch64 ã¢ãŒããã¯ãã£ã®å Žåãä¿è·ã¢ãŒããè¿œå ãããŸããã¹ã¿ãã¯ãšããŒãã®äº€å·® (ã-fstack-clash-protectionã)ã Armv8.5-A ã¢ãŒããã¯ãã£ã®æ©èœã䜿çšããããã«ããªãã·ã§ã³ã-march=armv8.5-aããè¿œå ãããŸããã - ããã«ã¯ãGCN ãã€ã¯ãã¢ãŒããã¯ãã£ã«åºã¥ã㊠AMD GPU çšã®ã³ãŒããçæããããã®ããã¯ãšã³ããå«ãŸããŠããŸãã çŸåšãå®è£ ã¯ã·ã³ã°ã«ã¹ã¬ãã ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã€ã« (OpenMP ããã³ OpenACC ãä»ãããã«ãã¹ã¬ããèšç®ã®å®è¡ã®ãµããŒãã¯åŸã§æäŸãããäºå®) ãš GPU Fiji ããã³ Vega 10 ã®ãµããŒãã«éå®ãããŠããŸãã
- ããã»ããµãŒçšã®æ°ããããã¯ãšã³ããè¿œå ããŸãã
OpenRISC ; - ããã»ããµãŒçšã®ããã¯ãšã³ããè¿œå
C-SKY V2 ãããŸããŸãªæ¶è²»è åãããã€ã¹åãã«ååã®äžåœäŒæ¥ã«ãã£ãŠè£œé ãããŠããŸãã - ãã€ãå€ãæäœãããã¹ãŠã®ã³ãã³ã ã©ã€ã³ ãªãã·ã§ã³ã¯ããµãã£ãã¯ã¹ kbãKiBãMBãMiBãGBãããã³ GiB ããµããŒãããŸãã
-
å®è£ æžã¿ ã-flive-patching=[inline-only-static|inline-clone]ããªãã·ã§ã³ã䜿çšãããšãããã·ãŒãžã£é (IPA ïŒæé©åã - bash 䜿çšæã®ãªãã·ã§ã³è£å®ããã现ããå¶åŸ¡ããããã®ã--completionããªãã·ã§ã³ãè¿œå ããŸããã
- 蚺æããŒã«ã¯ãè¡çªå·ã瀺ããœãŒã¹ ããã¹ãã®æç²ã衚瀺ãããªãã©ã³ã ã¿ã€ããªã©ã®é¢é£æ
å ±ãèŠèŠçã«ããŒã¯ããŸãã è¡çªå·ãšã©ãã«ã®è¡šç€ºãç¡å¹ã«ããããã«ããªãã·ã§ã³ã-fno-diagnostics-show-line-numbersãããã³ã-fno-diagnostics-show-labelsããæäŸãããŠããŸãã
-
æ¡åŒµããã C++ ã³ãŒãã®ãšã©ãŒã蚺æããããŒã«ããšã©ãŒã®åå ã«é¢ããæ å ±ã®èªã¿ãããã®åäžãããã³åé¡ã®ãããã©ã¡ãŒã¿ãŒã®åŒ·èª¿è¡šç€ºã - ãªãã·ã§ã³ã-fdiagnostics-format=jsonããè¿œå ããŸãããããã«ãããæ©æ¢°å¯èªåœ¢åŒ (JSON) ã§èšºæåºåãçæã§ããããã«ãªããŸãã
- åŠçãããœãŒã¹ ãã¡ã€ã«ãéžæããããã®æ°ãããããã¡ã€ãªã³ã° ãªãã·ã§ã³ã-fprofile-filter-filesãããã³ã-fprofile-exclude-filesããè¿œå ããŸããã
- AddressSanitizer ã¯ãèªåå€æ°çšã®ããã³ã³ãã¯ããªæ€èšŒã³ãŒãã®çæãæäŸããŸããããã«ããããã§ãã¯ãããå®è¡å¯èœãã¡ã€ã«ã®ã¡ã¢ãªæ¶è²»ãåæžãããŸãã
- ããã®åºåãæ¹åãããŸããã
-fopt-æ å ± » (è¿œå ãããæé©åã«é¢ãã詳现æ å ±)ã 以åã«å©çšå¯èœãªãã¬ãã£ãã¯ã¹ãnoteãã«å ããŠãæ°ãããã¬ãã£ãã¯ã¹ãoptimizedããšãmissedããè¿œå ãããŸããã ã€ã³ã©ã€ã³å±éãšãµã€ã¯ã«ã®ãã¯ãã«åã«é¢ããææ決å®ã«é¢ããæ å ±ã®åºåãè¿œå ããŸããã - ã-fsave-optimization-recordããªãã·ã§ã³ãè¿œå ããŸãããæå®ãããšãGCC ã¯ç¹å®ã®æé©åã®äœ¿çšã«é¢ãã決å®ã®èª¬æãå«ã SRCFILE.opt-record.json.gz ãã¡ã€ã«ãä¿åããŸãã æ°ãããªãã·ã§ã³ã¯ããããã¡ã€ã«ãã€ã³ã©ã€ã³ ãã§ãŒã³ã«é¢ããæ å ±ãªã©ã®è¿œå ã®ã¡ã¿ããŒã¿ãå«ãç¹ã§ãã-fopt-infoãã¢ãŒããšã¯ç°ãªããŸãã
- ããã·ãŒãžã£éæé©åäžã®éçå€æ°ã®ã¹ã¿ã㯠ã¢ã©ã€ã¡ã³ããšã¢ãã¬ã¹æå®ã¢ãŒã (æžã蟌ã¿å°çšãŸãã¯èªã¿åãå°çš) ã®äœ¿çšãå¶åŸ¡ãããªãã·ã§ã³ã-fipa-stack-alignmentãããã³ã-fipa-reference-addressableããè¿œå ããŸããã
- å±æ§ãã€ã³ãã£ã³ã°ãšãåå²äºæž¬ããã³ææ©çåœä»€ã®å®è¡ã«é¢é£ããåäœãå¶åŸ¡ããããã«ãæ°ããçµã¿èŸŒã¿é¢æ°ãå°å
¥ãããŸããã
__builtin_has_attribute «ã«__builtin_expect_with_probability " ãã㊠"__builtin_speculation_safe_value ãã é¢æ°ãå€æ°ãåã«æ°ããå±æ§ãè¿œå ãããŸããcopy ; - Fortran èšèªã§ã¯ãéåæå ¥åºåã®å®å šãªãµããŒããå®è£ ãããŸããã
- Solaris 10 (*-*-solaris2.10) ããã³ Cell/BE (Cell Broadband Engine SPU) ãã©ãããã©ãŒã ã®ãµããŒãã¯éââæšå¥šãšãªãã次ã®ã¡ãžã£ãŒ ãªãªãŒã¹ã§åé€ãããäºå®ã§ãã Armv2ãArmv3ãArmv5ãããã³ Armv5E ã¢ãŒããã¯ãã£ã®ãµããŒãã¯å»æ¢ãããŸããã Intel MPX (Memory Protection Extensions) ã®ãµããŒãã¯çµäºããŸããã
åºæïŒ ãªãŒãã³ããã.ru