ΠΠΎΡΠ»Π΅ Π³ΠΎΠ΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
GCC 10.1 ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»Π΅Π½ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΈΡ
Π½ΠΎΠ²ΡΠ΅ΡΡΠ² ΡΠ·ΡΠΊΠ° C++, ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡΡ
Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ° C++20, ΡΠ»ΡΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌΠΈ Ρ Π±ΡΠ΄ΡΡΠΈΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ ΡΠ·ΡΠΊΠ° Π‘ΠΈ (C2x), Π½ΠΎΠ²ΡΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ Π² Π±ΡΠΊΠ΅Π½Π΄Π°Ρ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅
-
ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° «-fanalyzer «, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ΅ΡΡΡΡΠΎΡΠΌΠΊΠΈΠΉ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΡΡΠ΅ΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. Π Π΅ΠΆΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΡΡΠ²Π»ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠ°ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ free() Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΡΡΠ΅ΡΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ², ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½ΡΠ»Π΅Π²ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄ΡΠ½Π½ΡΠΌ Π±Π»ΠΎΠΊΠ°ΠΌ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ Ρ.ΠΏ. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° Π΄Π»Ρ ΠΊΠΎΠ΄Π° OpenSSL ΡΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π²ΡΡΠ²ΠΈΡΡΠΎΠΏΠ°ΡΠ½ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ . - Π£Π»ΡΡΡΠ΅Π½Ρ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎΡ ΠΎΠ΄ IPA-SRA (ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½Π°Ρ ΡΠΊΠ°Π»ΡΡΠ½Π°Ρ Π·Π°ΠΌΠ΅Π½Π° ΠΎΠ±ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ) ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡΠΎΡΠ΅Π³ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΄Π°Π»ΡΠ΅Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ «-O2» Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΎΠΏΡΠΈΡ «-finline-functions», ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΡΡΡΠΎΠ΅Π½Π° Π² ΠΏΠΎΠ»ΡΠ·Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠ΅ΠΌ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π£ΡΠΊΠΎΡΠ΅Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΠ²ΡΠΈΡΡΠΈΠΊΠΈ inline-ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ²ΡΠΈΡΡΠΈΠΊΠ° inline-ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. ΠΠ»Ρ Π‘++ ΠΏΠΎΠ²ΡΡΠ΅Π½Π° ΡΠΎΡΠ½ΠΎΡΡΡ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΈΠΏΠΎΠ².
- Π Π°ΡΡΠΈΡΠ΅Π½Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ (LTO). ΠΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»
lto-dump Π΄Π»Ρ ΡΠ±ΡΠΎΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ΠΎΠΌ LTO. Π ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΡ ΠΎΠ΄Π°Ρ LTO ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ Π·Π°Π΄Π°Ρ make ΠΈ, Π΅ΡΠ»ΠΈ ΠΈΡ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΊΡΠΎΡΠ° ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ ΡΠΈΡΠ»Π΅ ΡΠ΄Π΅Ρ CPU. ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΆΠ°ΡΠΈΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° LTO ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° zstd. - Π£Π»ΡΡΡΠ΅Π½ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° (PGO — Profile-guided optimization), ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Π£Π»ΡΡΡΠ΅Π½ΠΎ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΈΠ»Ρ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ «Π³ΠΎΡΡΡΠ΅Π³ΠΎ»/»Ρ
ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎ» ΠΊΠΎΠ΄Π°. Π§Π΅ΡΠ΅Π· ΠΎΠΏΡΠΈΡ «
-fprofile-values » ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π΄ΠΎ 4 Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΡΠΈΠ»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΡΠΎΡΠΈΠ»Π΅. - ΠΠ»Ρ ΡΠ·ΡΠΊΠΎΠ² C, C++ ΠΈ Fortran ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
OpenACC 2.6 , ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ°Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π²ΡΠ½ΠΎΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (offloading) Π½Π° GPU ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ NVIDIA PTX. ΠΠΎΡΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ°OpenMP 5.0 (Open Multi-Processing), ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅Π³ΠΎ API ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΈ Π³ΠΈΠ±ΡΠΈΠ΄Π½ΡΡ (CPU+GPU/DSP) ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (SIMD). ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΠ°ΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΠΊ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ lastprivate, Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ scan ΠΈ loop, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ order ΠΈ use_device_addr. ΠΠ»Ρ OpenMP ΠΈ OpenACC Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΠ½ΠΎΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (offloading) Π½Π° GPU AMD Radeon (GCN) ΡΠ΅ΡΠ²ΡΡΡΠΎΠ³ΠΎ (Fiji) ΠΈ ΠΏΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ (VEGA 10/VEGA 20). - ΠΠ»Ρ ΡΠ·ΡΠΊΠΎΠ² ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° Π‘ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ «access» Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΈ Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌΠΈ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ «access» ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π°ΡΡΠΈΠ±ΡΡ «type» Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΈΠ· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΡΡΡ Π²Π½Π΅ Π³ΡΠ°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°. Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π°ΡΡΠΈΠ±ΡΡ «symver» Π΄Π»Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ELF-ΡΠ°ΠΉΠ»Π΅ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌ Π²Π΅ΡΡΠΈΠΉ.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ:
- «-Wstring-compare» (Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ «-Wextra») — ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π΅Ρ ΠΎ Π½Π°Π»ΠΈΡΠΈΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ Π½ΠΎΠ»Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ strcmp ΠΈ strncmp, ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ΡΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄Π»ΠΈΠ½Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅.
- «-Wzero-length-bounds» (Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ «-Warray-bounds») — ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π΅Ρ ΠΎ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π½ΡΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ Π΄ΡΡΠ³ΠΈΡ Π΄Π°Π½Π½ΡΡ .
- Π Π°ΡΡΠΈΡΠ΅Π½Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ «-Warray-bounds», «-Wformat-overflow», «-Wrestrict», «-Wreturn-local-addr» ΠΈ «-Wstringop-overflow», Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΎ ΡΠΈΡΠ»ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ Π²ΡΡ ΠΎΠ΄Π° Π·Π° Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΡ
ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°Ρ
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ UTF-8), Π° Π½Π΅ Π½ΠΎΡΠ°ΡΠΈΡ UCN (\uNNNN ΠΈΠ»ΠΈ \UNNNNNNNN). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
static const int π = 3;
int get_naïve_pi() {
return π;
} - ΠΠ»Ρ ΡΠ·ΡΠΊΠ° Π‘ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΡΡΠΈΡ Π½ΠΎΠ²ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡΡ
Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΡΡΠ°Π½Π΄Π°ΡΡΠ° C2X (Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ -std=c2x ΠΈ -std=gnu2x): ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° «[[]]» Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊΠ°ΠΊ Π² Π‘++ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, [[gnu::const]], [[deprecated]], [[fallthrough]] ΠΈ [[maybe_unused]]. ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° u8» Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π² UTF-8.
ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ Π² <float.h>. Π strftime Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ «%OB» ΠΈ «%Ob». - ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π‘ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½ ΡΠ΅ΠΆΠΈΠΌ «-fno-common», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ .
- ΠΠ»Ρ C++ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 16 ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Π½ΠΎΠ²ΡΠ΅ΡΡΠ², ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡΡ
Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ C++20. Π ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ «constinit»
ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² «ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ «. ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π°Π±ΠΎΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²Π½ΡΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². - Π G++ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΎ Π²ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, Π²ΡΠ·Π²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²-ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΡΠ΅ΡΠ΅Π· constexpr. Π‘Π½ΠΈΠΆΠ΅Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ constexpr. ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ «-Wmismatched-tags» ΠΈ «-Wredundant-tags».
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
- «-fallocation-dce» Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π»ΠΈΡΠ½ΠΈΡ ΠΏΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² «new» ΠΈ «delete».
- «-fprofile-partial-training» Π΄Π»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΊΠΎΠ΄Π°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΠΎΠ±ΡΡΠ°ΡΡΠΈΠΉ ΠΏΡΠΎΠ³ΠΎΠ½.
- «-fprofile-reproducible Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΌ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ.
- «-fprofile-prefix-path» Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ (Π΄Π»Ρ «-fprofile-generate=profile_dir» ΠΈ «-fprofile-use=profile_dir»).
- Π ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΡΡ ΠΎΠΏΡΠΈΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ ΠΏΠΎΠΊΠ°Π· Π³ΠΈΠΏΠ΅ΡΡΡΡΠ»ΠΎΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΡΠΈΠΌ ΠΎΠΏΡΠΈΡΠΌ. ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° URL ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠΏΡΠΈΠΈ «-fdiagnostics-urls».
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° «
__has_builtin «, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π°Π»ΠΈΡΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. - ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π½ΠΎΠ²Π°Ρ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ «__builtin_roundeven» Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ISO/IEC TS 18661 ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ, ΠΏΠΎΡ ΠΎΠΆΠ΅ΠΉ Π½Π° «round», Π½ΠΎ ΠΎΠΊΡΡΠ³Π»ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ Π±ΠΎΠ»ΡΡΠ΅ 0.5 Π²Π²Π΅ΡΡ (ΠΊ Π±ΠΎΠ»ΡΡΠ΅ΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ), ΠΌΠ΅Π½ΡΡΠ΅ 0.5 — Π²Π½ΠΈΠ· (Π΄ΠΎ Π½ΡΠ»Ρ), Π° ΡΠ°Π²Π½ΠΎΠΉ 0.5 — ΠΎΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡ ΠΎΡ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠΈΡΡΡ.
- ΠΠ»Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ AArch64 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ SVE2 ΠΈ ΡΠ»ΡΡΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° SVE (Scalable Vector Extension), Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΠΈΠΏΠΎΠ² SVE ACLE, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ. Π Π°ΡΡΠΈΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° LSE (Large System Extensions) ΠΈ TME (Transactional Memory Extension). ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π² Armv8.5-A ΠΈ Armv8.6-A, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ
ΡΠΈΡΠ΅Π», ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ, ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠ΅Π³ΠΎΠ² ΠΊ ΠΏΠ°ΠΌΡΡΠΈ,
bfloat16 ΠΈ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΡ. ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ²
Arm Cortex-A77,
Arm Cortex-A76AE,
Arm Cortex-A65,
Arm Cortex-A65AE,
Arm Cortex-A34 ΠΈ
Marvell ThunderX3. - ΠΠ»Ρ ARM32 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ABI FDPIC (64-ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ). ΠΠ΅ΡΠ΅Π΄Π΅Π»Π°Π½Π° ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° 64-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ
ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° CPU
Arm Cortex-A77,
Arm Cortex-A76AE ΠΈ
Arm Cortex-M35P. Π Π°ΡΡΠΈΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ACLE Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ , Π²ΠΊΠ»ΡΡΠ°Ρ 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅ SIMD, 16-Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΡ Ρ ΡΠΈΠΊΡΠ°ΡΠΈΠ΅ΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² DSP. ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ACLE CDE (Custom Datapath Extension). - ΠΠ½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΡΡΡΠ΅Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π² Π±ΡΠΊΠ΅Π½Π΄Π΅ Π΄Π»Ρ GPU AMD Π½Π° Π±Π°Π·Π΅ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ GCN.
- ΠΠ»Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ AVR Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° XMEGA-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
ΡΡΡΡΠΎΠΉΡΡΠ²
ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209, ATmega4808 ΠΈ ATmega4809. - ΠΠ»Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ IA-32/x86-64 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π½Π°Π±ΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ Intel ENQCMD (-menqcmd). ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° CPU Intel Cooperlake (-march=cooperlake, Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ISA-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ AVX512BF16) ΠΈ Tigerlake (-march=tigerlake, Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ISA-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ MOVDIRI, MOVDIR64B ΠΈ AVX512VP2INTERSECT).
- ΠΠ±ΡΡΠ²Π»Π΅Π½Π° ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½Π° Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π²ΡΠΏΡΡΠΊΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° HSAIL (Heterogeneous System Architecture Intermediate Language) Π΄Π»Ρ Π³Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π½ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π° Π±Π°Π·Π΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ HSA.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru