ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá
áºááŸá
áºááŒá®ážáá±á¬ááº
GCC 10.1 ááẠC++ 20 á
á¶ááŸá¯ááºážá¡ááœáẠáá®ááœááºáááºáá®ážáá¬ážáá±á¬ C++ áá¬áá¬á
áá¬ážááœáẠáááºážáá
áºáá®ááœááºááŸá¯áá»á¬ážá á¡áá¬ááẠC áá¬áá¬á
áá¬ážá
á¶ááŸá¯ááºáž (C2x) ááŸáá·áº áááºá
ááºáá±á¬ ááá¯ážáááºááŸá¯áá»á¬ážá compiler backends áá»á¬ážááœáẠá¡áá±á¬ááºážáá¯á¶ážááŒááºáááºááŸá¯áá»á¬ážááŸáá·áº á
ááºážáááºááŸá¯ááá¯ááºáᬠáá¶á·ááá¯ážááŸá¯á¡áá
áºáá»á¬áž
á¡ááá
-
áááºááŒá±á¬áá«áááºá áááºááŒáááºááŸá¯ááœá²ááŒááºážá áááºááŒá¬ááŸá¯áá ááºážáááºááŸá¯áá¯ááº"-fanalyzer "á áááá¯ááááºáá áºáá¯ááŸá code execution áááºážááŒá±á¬ááºážáá»á¬ážááŸáá·áº data flows áá»á¬ážááᯠá¡áááºážá¡ááŒá áº-á¡áá±ážáá±ážáá±á¬ á¡ááŒááºá¡ááŸááºáá¯ááºáá¯á¶ážáá¯ááºáááºážááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá áá¯ááºááẠááŸááºáá¬ááºá§áááá¬áá áºáá¯á¡ááœáẠfree() áá¯ááºáá±á¬ááºáá»ááºááá¯á· ááŸá áºáá»ááºáá±á«áºááá¯ááŸá¯áá»á¬ážá ááá¯ááºáá±á¬áºááŒáá»ááºáá±á«ááºááŒá¬ážááŸá¯á ááá¯ážáá¬ážáá»ááºáááŸááá±á¬ááœáŸááºááŒááŸá¯áá»á¬áž ááŒááºáááºážááŸá¯á ááœááºáááºážáá±á¬ááŸááºáá¬ááºáá¯á¶ážáá»á¬ážááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯ááŒááºážá áááŠážááááºááá¬ážáá±á¬áááºááá¯ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá áááºááŒáá·áº á á¯á ááºážááŸá¯á¡ááá·áºááœáẠááŒá¿áá¬áá»á¬ážááᯠáá±á¬áºáá¯ááºááá¯ááºááẠOpenSSL áá¯ááºá¡ááœáẠáá¯ááºá¡áá áºááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠááœá²ááŒá¬ážáááºááŸááºááẠááŒá áºááá¯ááºáá»á±ááŸáááŒá®ážááŒá áºáááºáá¡áá¹ááá¬ááºááŸááá±á¬ á¡á¬ážáááºážáá»áẠ. - áá¯ááºáá¯á¶ážáá¯ááºáááºáž á¡ááŒááºá¡ááŸáẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒáŸáá·áºáááºáá¬ážáááºá IPA-SRA (Interprocedural Scalar Shared Replacement) áááºááŸááºááᯠbind time ááœááºá¡áá¯ááºáá¯ááºááẠááŒááºáááºáá®ááá¯ááºážáá¯ááºáá¬ážááŒá®áž á¡ááŒá¬ážá¡áá¬áá»á¬ážáá²á០ááá¯á¡áá« ááœááºáá»ááºááŒá®áž á¡áá¯á¶ážáááŒá¯áá±á¬áááºááá¯ážáá»á¬ážááᯠáááºááŸá¬ážááá¯ááºáá«áááºá "-O2" ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážáá¯ááºááœááºá "-finline-functions" option ááá¯ááœáá·áºáá¬ážááŒá®ážá áááºážááẠáá¯ááºáá±á¬ááºááŸá¯á áœááºážáá±á¬ááºáááºááẠááá¯ááá¯áá»á áºáá áºááááºáááºážáá±á¬áá¯ááºááᯠááŸá áºáááºá á±ááẠááŒááºáááºáá»áááºááŸááá¬ážáááºá inline function deployment á¡ááœáẠheuristic ááá¯ááºáááºážááᯠá¡ááŸáááºááŒáŸáá·áºááá¯ááºáá«ááŒá®á á¡ááœááºážááá¯ááºážáá»á²á·ááœááºááŒááºážááŸáá·áº áá¯ááºáá±á¬ááºáá»ááºáá¯á¶áá°ááœá¬ážááŒááºáž heuristics ááẠáá áºáŠážáá»ááºážá á®á¡ááœááºááŒá±á¬ááºážááŒááºážááááá±á¬ááºááŸá¯ááᯠááá·áºááŸááºážááẠááá¯á¡áá« áááºááá¯ážá¡ááá¯ááºážá¡ááŒá¬ážáá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá C++ á¡ááœááºá á¡áá»áá¯ážá¡á á¬áž-á¡ááŒá±áᶠalias ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á áááá»ááŸá¯ááᯠááŒáŸáá·áºáááºáá¬ážáááºá
- ááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ áá»áááºáááºááŒááºážá¡áá»áááºááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºáž (LTO)á á¡áá±á¬ááºáááºáá±á¬áºááá¯ááºáá±á¬ á¡áá
áºááᯠááá·áºááœááºážáá¬ážáááºá
á¡ááŸáá¯ááºáá¯á¶ááŒá®áž LTO bytecode ááŒáá·áº á¡áá¬ááá¹áá¯ááá¯ááºáá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºááᯠááŒááºáááºáááºááŸááºáááºá Parallel LTO ááŒááºáááºážááŸá¯áá»á¬ážááẠáááŒáá¯ááºáááºáááºáž áá¯ááºáá±á¬ááºáá±áá±á¬ á¡áá¯ááºáá»á¬áž ááŒá¯áá¯ááºááá·áº á¡áá±á¡ááœááºááᯠá¡ááá¯á¡áá»á±á¬áẠáá¯á¶ážááŒááºááŒá®áž áááºážááá¯á·ááᯠááá¯á¶ážááŒááºááá¯ááºáá«áá CPU cores á¡áá±á¡ááœááºááŸáá·áº áááºáááºáá±á¬ á¡áá»ááºá¡áááºááᯠá¡ááŒáá¯ááºáá¯ááºáá±á¬ááºááá·áºá¡áá»ááºá¡ááŒá Ạá¡áá¯á¶ážááŒá¯áá«á zstd algorithm ááᯠá¡áá¯á¶ážááŒá¯á LTO bytecode ááᯠáá»á¯á¶á·ááẠá áœááºážáááºááᯠááá·áºááœááºážáá²á·áááºá - áá¯ááºáááá¯ááá¯ááºááŒá¯áá¯ááºááŒááºáž (PGO - Profile-guided optimization) ááááºáá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶á ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºáž ááá¹ááá¬ážá¡á¬áž ááŒáŸáá·áºáááºáá¬ážááŒá®ážá áá¯ááºáá¯ááºáá±á¬ááºááŸá¯á ááá¹ááá¬áá»á¬ážááᯠááœá²ááŒááºážá
áááºááŒá¬ááŸá¯á¡áá±á«áº á¡ááŒá±áá¶á ááá¯ááá¯ááá·áºáá»á±á¬áºáá±á¬áá¯ááºááᯠáá¯ááºáá±ážáá«áááºá á
á¯á
ááºážááŸá¯ ááŸáá·áº áá°/á¡á¡á±áž áá¯áẠááœá²ááŒá¬ážááŸá¯ áá¬áá¡ááœááºáž áááá¯ááá¯áẠááááºážááááºážááŸá¯ááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážáááºá ááœá±ážáá»ááºááŸá¯ááŸáááá·áº "
-fprofile-áááºááá¯ážáá»á¬áž » ááᯠááœááºááá¯ááºáá±á«áºááá¯ááŸá¯áá»á¬ážááŸáá·áº ááá¯ááá¯áááá»áá±á¬ áááá¯ááá¯ááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá±ážáá±á¬ááºáááºá¡ááœáẠá¥ááá¬á¡á¬ážááŒáá·áº áááá¯ááá¯ááºáááºááá¯áž 4 áá¯á¡áá á á±á¬áá·áºááŒáá·áºááá¯ááºáá«ááŒá®á - C, C++ ááŸáá·áº Fortran áá¬áá¬á
áá¬ážáá»á¬ážá¡ááœáẠá¡ááŒáá¯áẠáááá¯ááááºáá±ážááœá²ááŒááºáž áááºááŸááºáá»ááº
OpenACC 2.6 GPU áá»á¬ážááŸáá·áº NVIDIA PTX áá²á·ááá¯á·áá±á¬ á¡áá°ážááŒá¯áááá¯áááºáá¬áá»á¬ážáá±á«áºááœáẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáááºááŸá¬ážááŒááºážá¡ááœáẠáááááá¬áá»á¬ážááᯠáááºááŸááºáá±ážáááºá á á¶ááŸá¯ááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááŒá®ážáá¯áá®ážáá«ážááŒá áºáááºáMP 5.0 ááá¯ááœáá·áºáá«á (Open Multi-Processing)á API ááŸáá·áº áá»áŸáá±áá¬ážáá±á¬ ááŸááºáá¬ááºááŸáá·áº vectorization áá°áá Ạ(SIMD) áá«ááŸááá±á¬ multi-core ááŸáá·áº hybrid (CPU+GPU/DSP) á áá áºáá»á¬ážááœáẠá¡ááŒáá¯ááºáááá¯ááááºážáááºážáááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá·áº áááºážáááºážáá»á¬ážááᯠáááºááŸááºáá±ážááá·áº (Open Multi-Processing)á áá±á¬ááºáá¯á¶ážááá¯ááºáá±ážááá¯ááºáá¬á¡ááŒá±á¡áá±áá»á¬ážá á áááºáááºá á áºáá±ážááŒááºážááŸáá·áº ááŸáá·áºáááºáááºážááœáŸááºáá»ááºáá»á¬ážá ááŸá¬áá°ááŸá¯ááŸáá·áº use_device_addr á áá¬ážáááºáá»á¬ážáá²á·ááá¯á·áá±á¬ á¡ááºá¹áá«áááºáá»á¬ážááᯠááá·áºááœááºážáá¬ážáááºá OpenMP ááŸáá·áº OpenACC á¡ááœáẠá áá¯áá¹ááá»áá¯ážááẠ(Fiji) ááŸáá·áº ááá¹á ááá»áá¯ážááẠAMD Radeon (GCN) GPUs (VEGA 10/VEGA 20) ááœáẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáááºááŸá¬ážáááºá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááᯠááá·áºááœááºážáá¬ážáááºá - C áááá¬ážá á¯á áá¬áá¬á áá¬ážáá»á¬ážá¡ááœááºá áááºááœáŸááºážáá»áẠááá¯á·ááá¯áẠááœáŸááºááŒáá»ááºááŸáá±ážááá¯á·áá±á¬ á¡áá¬ááá¹áá¯áá»á¬ážáᶠáá¯ááºáá±á¬ááºáá»ááºááááºáá±á¬ááºááœáá·áºááá¯áá±á¬áºááŒááẠ"access" áá¯ááºáá±á¬ááºáá»ááºááᯠááá·áºááœááºážáá¬ážááŒá®áž ááá¯á¡áá¬ááá¹áá¯áá»á¬ážá á¡ááœááºá¡á á¬ážááŸáá·áºáááºáááºáá±á¬ á¡áá»ááºá¡áááºáá«ááŸááá±á¬ ááááºážááŒáá·áºá¡ááŒááºážá¡áá¯á¶áá»á¬ážááŸáá·áº áá±á«ááºážá ááºážáááºá âaccessâ ááŸáá·áº ááœá²áááºáá¯ááºáá±á¬ááºáááºá á¥ááá¬á array á áá±á¬ááºá¡ááŒááºáááºááŸá á§áááá¬ááá¯á· áááºááá¯ážáá»á¬ážáá±ážáá¬ážááá·áºá¡áá« á¡áá¯á¶ážááŒá¯áá°ááá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá០ááŸá¬ážááœááºážáááºáá±á¬ááºááŸá¯ááᯠááááŸáááẠâtypeâ attribute ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá ááá¯á·á¡ááŒáẠELF ááá¯ááºááœáẠáá®ážááá·áºáá¬ážááŸááºážáá¶áá«ááºáá»á¬ážáá«áá±á¬ áááºá¹áá±ááá»á¬ážááᯠááœá²áááºááá·áº "symver" áááºááœáŸááºážáá»ááºááá¯áááºáž ááá·áºááœááºážáá¬ážáááºá
- ááááá±ážáá»ááºá¡áá
áºáá»á¬áž ááá·áºááœááºážáá¬ážáááº-
- â-Wstring-compareâ (â-Wextraâ ááŒáá·áºááœáá·áºáá¬ážáááº) - strcmp ááŸáá·áº strncmp áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááá¯áá±á«áºááá¯ááŒááºážáááááºááŸáá·áº áá¯áááá¯ááŸáá¯ááºážááŸááºááá·áºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááŸááá±ááŒááºážááá¯ááááá±ážáááºá á¡ááŒááºážá¡áá¯á¶áá áºáá¯á áá¯áááá¡ááŒááºážá¡áá¯á¶ááŸá array áá¡ááœááºá¡á á¬ážááẠááŒá®ážáááºá
- "-Wzero-length-bounds" ("-Warray-bounds" ááŒáá·áº ááœáá·áºáá¬ážáááº) - á¡ááŒá¬ážáá±áá¬ááᯠáááºáá±ážááẠááŒá áºáá±á«áºáá¬ááá¯ááºááá·áº á¡áá»á¬áž áá¯áá á¡áááºážá¡áá»ááºážááŒááºá ááºáá»á¬ážááᯠáááºáá±á¬ááºááŒááºážá¡ááŒá±á¬ááºáž ááááá±ážáááºá
- â-Warray-boundsâá â-Wformat-overflowâá â-Wrestrictâá â-Wreturn-local-addrâ ááŸáá·áº â-Wstringop-overflowâ ááááá±ážáá»ááºáá»á¬ážááẠáááºááááááºááŒááºáá¡ááŒá±á¡áá±áá»á¬áž á¡áá±á¡ááœááºááᯠáá»á²á·ááœááºááẠáá»á²á·ááœááºáá¬ážáá«áááºá ááá¯ááºááœááºáááºá
- UCN á¡ááŸááºá¡áá¬áž (\uNNNN ááá¯á·ááá¯áẠ\UNNNNNNNN) ááẠáááºááŸá áá¯ááºáá¶áá«áẠ(UTF-8) ááᯠá¡áá¯á¶ážááŒá¯á áá»ááºááŒáá·áºáá±á¬ á
á¬áá¯á¶ážáá»á¬ážááᯠááá¯ááºááá¯ááºáááºááŸááºááá¯ááºááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá á¥ááá¬á¡á¬ážááŒááºá·:
static const int Ï = 3;
int get_naïve_pi() {
Ï ááŒááºáá¬;
} - C áá¬áá¬á
áá¬ážá¡ááœááºá C2X á
á¶ááŸá¯ááºážá¡ááœááºáž áá®ááœááºáá¬ážááá·áº á¡ááºá¹áá«áááºá¡áá
áºáá»á¬ážá á¡á
áááºá¡ááá¯ááºážáá
áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá«ááŒá® (-std=c2x ááŸáá·áº -std=gnu2x ááᯠáááºááŸááºááŒááºážááŒáá·áº ááœáá·áºáá¬ážáááº) : â[[]]â syntax á¡ááœáẠáá¶á·ááá¯ážááŸá¯ááŸá¬ áá«ááŸáááá·áºá¡ááá¯ááºáž attribute áá»á¬ážááᯠá¡áááá¹áá¬ááºááœáá·áºááá¯áááºá¡ááœáẠáá±á«áºáá¬áá«áááºá C++ (á¥ááá¬á [[gnu ::const]]á [[deprecated]]á [[fallthrough]] ááŸáá·áº [[maybe_unused]]á UTF-8 á
á¬áá¯á¶ážáá»á¬ážááŸáá·áº ááááºážáá±áá»á¬ážááᯠáááºááŸááºáááºá¡ááœáẠ"u8" syntax á¡ááœáẠáááºáá±á¬ááºážáá¶á·ááá¯ážááŸá¯á
áááºáááá¯á¡áá áºáá»á¬ážááᯠááá·áºáá±ážáá²á·áááºá . strftime ááœáẠ"%OB" ááŸáá·áº "%Ob" á¡á á¬ážááá¯ážááŸá¯áá»á¬ážááᯠáá±á«ááºážááá·áºáá²á·áááºá - C á¡ááœáẠáá°áááºážáá¯ááºááŸá¬ "-fno-common" ááŒá áºááŒá®áž á¡áá»áá¯á·áá±á¬ platform áá»á¬ážááœáẠglobal variables áá»á¬ážááᯠááá¯ááá¯áááá±á¬ááºá áœá¬ áááºáá±á¬ááºááá¯ááºá á±áá«áááºá
- C++ á¡ááœááºá ááŒá±á¬ááºážáá²ááŸá¯ááŸáá·áº áá®ááœááºáááºážáá
áºááŸá¯ áá áá¯ááá·áºááᯠC++ 16 á
á¶ááŸá¯ááºážááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá áááºáá±á¬ááºážáá±á¬áá±á¬á·áá»ááºá
áá¬ážáá¯á¶áž "constinit" á¡áá«á¡áááº
template extensions áá»á¬ážá¡ááœáẠá¡áá±á¬ááºá¡áá¶á·ááᯠá¡áá±á¬ááºá¡ááẠáá±á¬áºáá²á·áááº"ááá±á¬ááá¬áž â . ááá±á¬ááá¬ážáá»á¬ážááẠááá·áºá¡á¬áž áááºážáááááºáá«áá¬áá®áá¬áá»á¬ážá¡ááŒá Ạáááºáá¶ááá¯ááºááá·áº á¡ááŒá±á¬ááºážááŒáá»ááºá¡á á¯á¶ááᯠá á¯á ááºážááá·áºá¡áá»áááºá ááá·áºáááºáá¬ážááá·áº áááºážáááááºáá«áá¬áá®áá¬áááºááŸááºáá»ááºáá»á¬ážááᯠáááºááŸááºááœáá·áºááŒá¯áááºá ááá°áá¬áá¯á¶á á¶á¡ááœááºážá¡áá¯á¶ážááŒá¯ááá·áº áá±áá¬á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áá¯ááºááá¹áááá»á¬ážááŸáá·áº ááá·áºááœááºážááá·áºáááºáá±á¬ááºáá»á¬ážá áá±áá¬á¡áá»áá¯ážá¡á á¬ážáá¯ááºááá¹áááá»á¬ážá¡ááŒá¬áž áá¯áá¹ááááá®áá±á¬ ááá±á¬ááá¬ážáá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážááẠááá±á¬ááá¬ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá - G++ ááẠconstexpr ááŸáá áºááá·áº á¡áááºáááŒááºá¡áá¬ááá¹áá¯áá»á¬ážááᯠááŒá±á¬ááºážáá²ááŒááºážááŒá±á¬áá·áº ááŒá áºáá±á«áºáá¬áá±á¬ áááºááŸááºááá¬ážáá±á¬ á¡áá°á¡áá»áá·áºáá»á¬ážááᯠááŸá¬ááœá±ááœá±á·ááŸáááá¯ááºáááºá constexpr ááœááºáá»ááºáá¬ááœáẠcompiler á០memory áá¯á¶ážá áœá²ááŸá¯ááᯠáá»áŸá±á¬á·áá»áááºá ááááá±ážáá»ááºá¡áá Ạ"-Wmismatched-tags" ááŸáá·áº "-Wredundant-tags" ááá¯á·ááᯠááá·áºááœááºážáá²á·áááºá
- á¡áááá·áºá
á¬ááá¯ááºážááœá±ážáá»ááºá
áá¬á¡áá
áºáá»á¬ážááᯠá¡ááá¯ááŒá¯áá¬ážáááºá
- "-fallocation-dce" á០áááá¯á¡ááºáá±á¬ "new" ááŸáá·áº "delete" operators á¡ááœá²áá»á¬ážááᯠáááºááŸá¬ážáááºá
- áá±á·áá»áá·áºáá±ážáá¯ááºáá±á¬ááºááŒááºážáááŸááá«á áá¯ááºá¡ááœáẠá¡ááœááºá¡á á¬áž ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážááᯠááááºááẠ"-fprofile-partial-training"á
- "-fprofile-reproducible áááá¯ááá¯ááºááŒááºáááºáá¯ááºáá¯ááºááá¯ááºááŸá¯á¡ááá·áºááᯠááááºážáá»á¯ááºáááºá
- áá®ážááŒá¬ážáááá¯ááá¯ááºáá»áá¯ážáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº á¡ááŒá±áá¶á¡áááºážá¡ááŒá áºáááºáá±á¬ááºááŸá¯áááºážááœáŸááºááᯠáááºááŸááºááẠ"-fprofile-prefix-path" ("-fprofile-generate=profile_dir" ááŸáá·áº "-fprofile-use=profile_dir" á¡ááœááº)á
- áá±á¬áºááŒáá¬ážáá±á¬ ááœá±ážáá»ááºá áá¬áá»á¬ážá¡ááœáẠááááá±ážá á¬áá¬ážááœááºá á€ááœá±ážáá»ááºá áá¬áá»á¬ážá¡ááœáẠá á¬ááœááºá á¬áááºážáá»á¬ážááᯠáááºááœá¬ážááœáá·áºááŒá¯ááá·áº ááá¯ááºáá«ááá·áºááºáá»á¬ážááᯠáá±ážáá¬ážáááºá URL á¡á á¬ážááá¯ážááŒááºážááᯠ"-fdiagnostics-urls" ááœá±ážáá»ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á ááááºážáá»á¯ááºáá¬ážáááºá
- ááŒáá¯áááºáááá¯áááºáᬠá¡á±á¬áºááá±áᬠááá·áºáá¬ážáááº"
__has_builtin """"""""""""""""")""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - ISO/IEC TS 18661 áááºááŸááºáá»ááºááœáẠáááºááŸááºáá¬ážáá±á¬ á¡ááá¯ááºážáá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŒáá·áº "á¡ááá¯ááºáž" ááŸáá·áº áááºáá°áá±á¬áºáááºáž 0.5 áááºááŒá®ážáá±á¬ á¡ááá¯ááºážááᯠ0.5 á¡áá (ááá¯ááŒá®ážáá±á¬áááºááá¯ážááá¯á·) áááºáááºážáá±á¬ 0.5 áááºáááºážáá±á¬ á¡ááá¯ááºážáá¯ááºáá±á¬ááºáá»ááºááᯠááá·áºááœááºážáá¬ážáá±á¬ "__builtin_roundeven" áá¯ááºáá±á¬ááºáá»ááºá¡áá áºááᯠáááºááá·áºáá¬ážáááºá - á¡á±á¬áẠ(áá¯áááŸ) ááŸáá·áº XNUMX ááŸáá·áº áá®áá»áŸááẠ- áá±á¬ááºáá¯á¶ážááááºážá parity ááŸá áááºáááºá
- AArch64 áááá¯áá¬á¡ááœááºá SVE2 ááá¯ážáá»á²á·ááŸá¯ááᯠáá¶á·ááá¯ážáá±ážáá¬ážááŒá®áž SVE (Scalable Vector Extension) á¡ááœáẠáá¶á·ááá¯ážááŸá¯á¡á¬áž ááŒáŸáá·áºáááºáá¬ážááŒá®áž SVE ACLE áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸáá·áº á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážá¡ááœáẠáá±á«ááºážááá·áºáá¬ážáá±á¬ áá¶á·ááá¯ážááŸá¯á ááŸáá·áº vectorization á¡áá¯á¶ážááŒá¯ááŸá¯ááá¯á· á¡áá«á¡áááºááŒá
áºáááºá LSE (Large System Extensions) ááŸáá·áº TME (Transactional Memory Extension) á¡ááœáẠáá¶á·ááá¯ážááŸá¯ááᯠááá¯ážáá»á²á·áá¬ážáá«áááºá Armv8.5-A ááŸáá·áº Armv8.6-A ááœáẠá¡ááá¯ááŒá¯áá¬ážááá·áº ááœáŸááºááŒá¬ážáá»ááºá¡áá
áºáá»á¬áž áá±á«ááºážááá·áºáá¬ážááŒá®áž áá»áááºážáá¶áá«ááºáá¯ááºáá¯ááºááŒááºážá ááŸáá·áºááŒááºážá áááºááá¯áá®áááºáẠáá±á«ááºážá
ááºááŒááºážá
bfloat16 ááŸáá·áº matrix ááŒáŸá±á¬ááºááŒááºážá áááá¯áááºáᬠáá¶á·ááá¯ážááŸá¯áááºáž ááá·áºááœááºážáá¬ážáá«áááºá
Arm Cortex-A77á
Arm Cortex-A76AEá
Arm Cortex-A65á
Arm Cortex-A65AEá
Arm Cortex-A34 ááŸáá·áº
Marvell ThunderX3á - ARM32 á¡ááœáẠABI FDPIC (64-bit function pointers) á¡ááœáẠáá¶á·ááá¯ážááŸá¯ áá±á«ááºážááá·áºáá¬ážáááºá 64-bit integer operations áá»á¬ážááᯠááŒááºáááºáá®ááá¯ááºážáá±ážááœá²ááŒá®áž á¡áá±á¬ááºážáá¯á¶ážáá¯ááºáá±á¬ááºááŒááºážá CPU áá¶á·ááá¯ážááŸá¯ áááºááá·áºáá¬ážáááºá
Arm Cortex-A77á
Arm Cortex-A76AE ááŸáá·áº
áááºáá±á¬ááºáž Cortex-M35Pá 32-áá ẠSIMDá 16-áá áºááœá¬ážááŸá¯á áááºááœááºááááºážáááºá¹áá»á¬ááŸáá·áº á¡ááŒá¬áž DSP á¡ááºáááá¯áá®ááẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬áž á¡áá«á¡ááẠACLE áá±áá¬áá¯ááºáá±á¬ááºááŒááºážááá¯ááºáᬠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá¡ááœáẠááá¯ážáá»á²á·áá¶á·ááá¯ážááŸá¯á ACLE CDE (Custom Datapath Extension) ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž á¡ááœáẠá ááºážáááºááŸá¯ áá¶á·ááá¯ážááŸá¯ áááºááá·áºáá¬ážáááºá - GCN microarchitecture ááá¯á¡ááŒá±áá¶á AMD GPUs á¡ááœáẠáá±á¬ááºááœááºááœáẠáá¯ááºáá¯ááºáá¯ááºááŒááºážááŸáá·áº vectorization áááááá¬áᬠááá¯ážáááºáá±á¬ááºážááœááºáá¬áá«áááºá
- AVR áááá¯áá¬á¡ááœáẠXMEGA áá²á·ááá¯á·áá±á¬ á
ááºáá
á¹á
ááºážáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ áááºááá·áºáá¬ážáááºá
ATtiny202á ATtiny204á ATtiny402á ATtiny404á ATtiny406á ATtiny804á ATtiny806á ATtiny807á ATtiny1604á ATtiny1606á ATtiny1607á ATmega808á ATmega809ga1608á1609á , ATmega3208 3209, ATmega4808 ááŸáá·áº ATmega4809á - IA-32/x86-64 áááá¯áá¬áá»á¬ážá¡ááœáẠIntel ENQCMD áááºážááœáŸááºáá»ááºá¡á á¯á¶áááá¯áᬠááá¯ážáá»á²á·ááŸá¯ (-menqcmd) ááᯠáá±á«ááºážááá·áºááá¯ááºáá«ááŒá®á Intel Cooperlake (-march=cooperlakeá AVX512BF16 ISA ááá¯ážáá»á²á·ááŸá¯) ááŸáá·áº Tigerlake (-march=tigerlakeá MOVDIRIá MOVDIR64B ááŸáá·áº AVX512VP2INTERSECT ISA á¡áááºáá»á¬áž) CPU áá»á¬áž áá«áááºáááºá
- HSA áááá¯áá¬ááá¯á¡ááŒá±áá¶á ááœá²ááŒá¬ážáá±á¬ ááœááºááŒá°áá¬á áá áºáá»á¬ážá¡ááœáẠHSAIL (Heterogeneous System Architecture Intermediate Language) á á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠáááºááá¯ááºážááá¯ááºááŒá®áž áá±á¬ááºááœááºááŸáááá·áºá¡áá»áááºááœáẠáááºááŸá¬ážáá¶áááœááºááŸááááºá
source: opennet.ru