Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅
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. ΠΡΠΎΡΠ΅ΡΡΡ Π½Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π΅Π·ΠΈΠΊ D Π² GCCΠ·Π°ΠΏΠΎΡΠ½Π° ΠΎΡΠ΅ ΠΏΡΠ΅Π· 2011 Π³., Π½ΠΎΠΏΡΠΎΡΠΎΡΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΠΏΡΠΈΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π½Π° GCC ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΡΠ°Π²Π° Π²ΡΡΡ Ρ ΠΈΠ½ΡΠ΅Π»Π΅ΠΊΡΡΠ°Π»Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΡ Π½Π° Digital Mars, ΠΊΠΎΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ D; - ΠΠ°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΡΠ° ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π·Π° ΡΠ°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·ΡΠ°Π·ΠΈ Π½Π° Switch (ΡΠ°Π±Π»ΠΈΡΠ° Π·Π° ΠΏΡΠ΅ΡΠΊΠ°ΡΠ°Π½Π΅, Π±ΠΈΡΠΎΠ² ΡΠ΅ΡΡ, Π΄ΡΡΠ²ΠΎ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡΡΠ°) Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΈΡΡΠ°ΡΠΈΠΈΡΠ΅. ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΈΠ·ΡΠ°Π· Switch, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° β-ftree-switch-conversionβ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΊΠ°ΡΠΎ βΡΠ»ΡΡΠ°ΠΉ 2: ΠΊΠ°ΠΊ = 205; ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅; ΡΠ»ΡΡΠ°ΠΉ 3: ΠΊΠ°ΠΊ = 305; ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ ;β ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° Π² β100 * ΠΊΠ°ΠΊ + 5β;
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄ΡΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π·Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΡΠ° Π°Π΄Π°ΠΏΡΠΈΡΠ°Π½ΠΈ Π·Π° ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ C++ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ Ρ Π½ΠΎΠ²ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns ΠΈ uninlined -Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΡΠ°Π·ΠΌΠΈΡΡΠ». ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΡΠΎΡΠ½ΠΎΡΡ ΠΈ Π°Π³ΡΠ΅ΡΠΈΠ²Π½ΠΎΡΡ Π½Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΡΡΡΠ΄Π΅Π½/Π³ΠΎΡΠ΅Ρ ΠΊΠΎΠ΄. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ
ΠΏΡΠ΅Π²ΠΎΠ΄Π½ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ); - ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ Π΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡΡ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° (PGO - Profile-guided optimization), ΠΊΠΎΠΉΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΏΠΎ-ΠΎΠΏΡΠΈΠΌΠ°Π»Π΅Π½ ΠΊΠΎΠ΄ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°. ΠΠΏΡΠΈΡ Π·Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ "
-fprofile-ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ " ΡΠ΅Π³Π° Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ΅ΠΆΠΈΠΌΠΈΡΠ΅ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ΠΈ "-ftree-loop-distribution". ΠΡΠ΅ΠΌΠ°Ρ Π½Π°ΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Ρ ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΈ Ρ Π±ΡΠΎΡΡΠΈ Π²ΡΠ² ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΠΌΠ°Π»ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈ (Ρ ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π²Π΅ΡΠ΅ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅); - ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ (LTO). ΠΠ΅ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠ΅Π½ΠΎ ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° LTO ΠΎΠ±Π΅ΠΊΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½Π΅ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅. ΠΡΠΎΡΡ Π½Π° Π΄ΡΠ»ΠΎΠ²Π΅ΡΠ΅ (-param lto-partitions) Π΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ ΠΎΡ 32 Π½Π° 128, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ Π½ΠΈΡΠΊΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°. ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π±ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΈ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ°
"-param lto-max-streaming-parallelism";Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π°, Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ GCC 8.3, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈΡΠ΅, Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈ Π² GCC 9
ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ Π½Π°ΠΌΠ°Π»Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Firefox 5 ΠΈ LibreOffice 66 Ρ ΠΎΠΊΠΎΠ»ΠΎ 6.2.3%. Π Π°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΠΎΠ±Π΅ΠΊΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π΅ Π½Π°ΠΌΠ°Π»ΡΠ» ΡΡΡ 7%. ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° 8-ΡΠ΄ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π°ΠΌΠ°Π»ΡΠ²Π° Ρ 11%. ΠΡΠ°ΠΏΡΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π²Π΅ΡΠ΅ Π΅ 28% ΠΏΠΎ-Π±ΡΡΠ· ΠΈ ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° 20% ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΏΠ°ΠΌΠ΅Ρ. ΠΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΎΡ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈΡ Π΅ΡΠ°ΠΏ Π½Π° LTO Π½Π°ΠΌΠ°Π»ΡΠ²Π° Ρ 30%; - ΠΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π·Π° Π΅Π·ΠΈΡΠΈΡΠ΅ C, C++ ΠΈ Fortran
OpenACC 2.5 , ΠΊΠΎΠΉΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ°Π·ΡΠΎΠ²Π°ΡΠ²Π°ΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° GPU ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ ΠΊΠ°ΡΠΎ NVIDIA PTX; - Π§Π°ΡΡΠΈΡΠ½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π·Π° C ΠΈ C++
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ MP 5.0 (Open Multi-Processing), ΠΊΠΎΠΉΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° API ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π·Π° C, C++ ΠΈ Fortran Π΅Π·ΠΈΡΠΈ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄ΡΠ΅Π½ΠΈ ΠΈ Ρ ΠΈΠ±ΡΠΈΠ΄Π½ΠΈ (CPU+GPU/DSP) ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΡΡ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠΈ Π·Π° Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ (SIMD) ; - ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ Π·Π° Π΅Π·ΠΈΠΊΠ° C: "
-Waddress-of-packed-member " (ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° Π½Π΅ΠΏΠΎΠ΄ΡΠ°Π²Π½Π΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΠΊΡΠΌ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½ ΡΠ»Π΅Π½ Π½Π° ΡΡΡΡΠΊΡΡΡΠ° ΠΈΠ»ΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅) ΠΈ
Β«-WΠ°Π±ΡΠΎΠ»ΡΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ " (ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° Π°Π±ΡΠΎΠ»ΡΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ, Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° fabs(3.14) Π²ΠΌΠ΅ΡΡΠΎ abs(3.14). ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ Π·Π° C++: β-Wdeprecated-copyβ,
β-Winit-list-lifetimeβ, β-Wredundant-moveβ, β-Wpessimizing-moveβ ΠΈ β-Wclass-conversionβ. ΠΠ½ΠΎΠ³ΠΎ Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ; - ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠ°ΡΡ ΠΎΡ Π±ΡΠ΄Π΅ΡΠΈΡ Π΅Π·ΠΈΠΊΠΎΠ² ΡΡΠ°Π½Π΄Π°ΡΡ C, Ρ ΠΊΠΎΠ΄ΠΎΠ²ΠΎ ΠΈΠΌΠ΅ C2x. ΠΠ° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° C2x, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΎΠΏΡΠΈΠΈΡΠ΅ "-std=c2x" ΠΈ "-std=gnu2x" (Π·Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡΡΠ° Π½Π° GNU). Π‘ΡΠ°Π½Π΄Π°ΡΡΡΡ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π² ΡΠ°Π½Π΅Π½ Π΅ΡΠ°ΠΏ Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΎΡ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°ΠΌΠΎ ΠΈΠ·ΡΠ°Π·ΡΡ _Static_assert Ρ Π΅Π΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ (_Static_assert Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ°Π½ Π² C11);
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° C++17 Π΅ ΠΎΠ±ΡΠ²Π΅Π½Π° Π·Π° ΡΡΠ°Π±ΠΈΠ»Π½Π°. ΠΡΠ² ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π° Π΅Π·ΠΈΠΊΠΎΠ²ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π° C++17 ΡΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈ, Π° Π² libstdc++ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ°, ΡΠ° Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ ΠΏΡΠ»Π½Π°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ;
- ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°
ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° Π±ΡΠ΄Π΅ΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ C++2a. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈ ΡΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π·Π° Π»Π°ΠΌΠ±Π΄Π° ΠΈΠ·ΡΠ°Π·ΠΈ, Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠ°Π·Π½ΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΈ/Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠ»ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ ΠΈ Ρ.Π½.
ΠΠ° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° C++2a, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΎΠΏΡΠΈΠΈΡΠ΅ "-std=c++2a" ΠΈ "-std=gnu++2a". ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ Π±ΠΈΡΠΎΠ²ΠΈ ΠΈ Π²Π΅ΡΡΠΈΠΈΠ½ΠΈ Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΡΠΌ libstdc++ Π·Π° C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ΠΈ std::type_identity Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ, std::midpoint, std::lerp ΡΡΠ½ΠΊΡΠΈΠΈ , 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β - Π’ΠΎΠΉ Π²ΠΊΠ»ΡΡΠ²Π° Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° AMD Π³ΡΠ°ΡΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° GCN. ΠΠΎΠ½Π°ΡΡΠΎΡΡΠ΅ΠΌ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ Π΄ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π΅Π΄Π½ΠΎΠ½ΠΈΡΠΊΠΎΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠ½ΠΈΡΠΊΠΎΠ²ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠ΅Π· OpenMP ΠΈ OpenACC) ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° GPU Fiji ΠΈ Vega 10;
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ Π½ΠΎΠ² Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ
OpenRISC ; - ΠΠΎΠ±Π°Π²Π΅Π½ Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ
C-SKY V2 , ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈ ΠΎΡ Π΅Π΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Π°ΡΠ° ΠΊΠΈΡΠ°ΠΉΡΠΊΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°; - ΠΡΠΈΡΠΊΠΈ ΠΎΠΏΡΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ ΡΡΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° Π±Π°ΠΉΡΠΎΠ²Π΅, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΡΡΠΈΠΊΡΠΈΡΠ΅ kb, KiB, MB, MiB, GB ΠΈ GiB;
-
ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΎ ΠΎΠΏΡΠΈΡΡΠ° β-flive-patching=[inline-only-static|inline-clone]β Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π½Π° ΠΆΠΈΠ²ΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ΅ΠΏΠ΅Π½Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π²ΡΡΡ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΠΆΠ΄ΡΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΈ (ΠΠΠ ) ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ; - ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΡ β--completionβ Π·Π° ΠΏΡΠ΅ΡΠΈΠ·Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠΈΡΡΠ° ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° bash;
- ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π·Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π΄ΠΈΡΠΏΠ»Π΅ΠΈ Π½Π° ΠΈΠ·Π²Π°Π΄ΠΊΠΈ ΠΎΡ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΡΠ΅ΠΊΡΡ, ΡΠΊΠ°Π·Π²Π°ΡΠΈ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΡΠ΅Π΄Π° ΠΈ Π²ΠΈΠ·ΡΠ°Π»Π½ΠΎ ΠΌΠ°ΡΠΊΠΈΡΠ°ΡΠΈ ΡΠ²ΡΡΠ·Π°Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠ°ΡΠΎ ΡΠΈΠΏΠΎΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΈ. ΠΠ° Π΄Π° Π·Π°Π±ΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΈ Π΅ΡΠΈΠΊΠ΅ΡΠΈ, ΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΠΏΡΠΈΠΈΡΠ΅ β-fno-diagnostics-show-line-numbersβ ΠΈ β-fno-diagnostics-show-labelsβ;
-
Π Π°Π·ΡΠΈΡΠ΅Π½ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² C++ ΠΊΠΎΠ΄, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΡΠ΅ΡΠΈΠΌΠΎΡΡ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° ΠΏΡΠΈΡΠΈΠ½ΠΈΡΠ΅ Π·Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΈ ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ; - ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΎΠΏΡΠΈΡ β-fdiagnostics-format=jsonβ, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ΅Π½ ΠΈΠ·Ρ ΠΎΠ΄ Π² ΠΌΠ°ΡΠΈΠ½Π½ΠΎ ΡΠ΅ΡΠΈΠΌ ΡΠΎΡΠΌΠ°Ρ (JSON);
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅ β-fprofile-filter-filesβ ΠΈ β-fprofile-exclude-filesβ Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°;
- AddressSanitizer ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎ-ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΠΊΠΎΠ΄ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ»;
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ ΠΈΠ·Ρ
ΠΎΠ΄ Π² "
-fopt-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Β» (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ). ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΏΡΠ΅ΡΠΈΠΊΡΠΈ βΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½β ΠΈ βΠΏΡΠΎΠΏΡΡΠ½Π°Ρβ, Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ Π½Π°Π»ΠΈΡΠ΅Π½ ΠΏΡΠ΅ΡΠΈΠΊΡ βΠ·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°β. ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΠΈΠ½Π»Π°ΠΉΠ½ ΡΠ°Π·Π³ΡΠ²Π°Π½Π΅ ΠΈ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΈΠΊΠ»ΠΈ; - ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΡΡΠ° β-fsave-optimization-recordβ, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½Π°, GCC Π·Π°ΠΏΠΈΡΠ²Π° ΡΠ°ΠΉΠ»Π° SRCFILE.opt-record.json.gz Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡΡΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎΠ²Π°ΡΠ° ΠΎΠΏΡΠΈΡ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ ΡΠ΅ΠΆΠΈΠΌΠ° β-fopt-infoβ, ΠΊΠ°ΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΡΠΎΡΠΈΠ»Π° ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ Π²Π΅ΡΠΈΠ³ΠΈ;
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΎΠΏΡΠΈΠΈ β-fipa-stack-alignmentβ ΠΈ β-fipa-reference-addressableβ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΠΏΠΎΠ΄ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ΅ΠΊΠ° ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΆΠΈΠΌΠΈ Π½Π° Π°Π΄ΡΠ΅ΡΠΈΡΠ°Π½Π΅ (ΡΠ°ΠΌΠΎ Π·Π° Π·Π°ΠΏΠΈΡ ΠΈΠ»ΠΈ ΡΠΎΡΠ½ΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅) Π·Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΌΠ΅ΠΆΠ΄ΡΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ;
- ΠΡΠ²Π΅ΠΆΠ΄Π°Ρ ΡΠ΅ Π½ΠΎΠ²ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ ΠΈ ΡΠΏΠ΅ΠΊΡΠ»Π°ΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ: "
__builtin_has_attribute ","__Π²Π³ΡΠ°Π΄Π΅Π½ΠΎ_ΠΎΡΠ°ΠΊΠ²Π°Π½Π΅_Ρ_Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡ " Π "__builtin_speculation_safe_value ". ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ Π½ΠΎΠ² Π°ΡΡΠΈΠ±ΡΡ Π·Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ; - Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ ΠΏΡΠ»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ Π²Ρ ΠΎΠ΄/ΠΈΠ·Ρ ΠΎΠ΄ Π·Π° Π΅Π·ΠΈΠΊΠ° Fortran;
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Solaris 10 (*-*-solaris2.10) ΠΈ Cell/BE (Cell Broadband Engine SPU) Π΅ ΠΎΡΡ Π²ΡΡΠ»Π΅Π½Π° ΠΈ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°ΡΠ° Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ Armv2, Armv3, Armv5 ΠΈ Armv5E Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½Π°. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° Intel MPX (ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π·Π° Π·Π°ΡΠΈΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°) Π΅ ΠΏΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru