Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅
GCC 10.1 ΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π²Π° Ρ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ Π² Π΅Π·ΠΈΠΊΠ° C++, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ Π·Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° C++20, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π±ΡΠ΄Π΅ΡΠΈΡ Π΅Π·ΠΈΠΊΠΎΠ² ΡΡΠ°Π½Π΄Π°ΡΡ C (C2x), Π½ΠΎΠ²ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ°
-
ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· "-ΡΠ°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ β, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ΅ΡΡΡΡΠΎΠ΅ΠΌΡΠΊ ΠΌΠ΅ΠΆΠ΄ΡΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΏΡΡΠΈΡΠ°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΎΡ Π΄Π°Π½Π½ΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. Π Π΅ΠΆΠΈΠΌΡΡ Π΅ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π΄Π° ΠΎΡΠΊΡΠΈΠ²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΠΊΠ°ΡΠΎ Π΄Π²ΠΎΠΉΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° free() Π·Π° Π΅Π΄Π½Π° ΠΎΠ±Π»Π°ΡΡ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ, Π΄Π΅ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΡΠ»Π΅Π²ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΏΠ°ΠΌΠ΅Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΈ Ρ.Π½. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈΡ ΡΠ΅ΠΆΠΈΠΌ Π·Π° OpenSSL ΠΊΠΎΠ΄ Π²Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ΡΠΎΠΎΠΏΠ°ΡΠ½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡ . - ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄ΡΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎΠΏΡΡΠΊΡΡ IPA-SRA (ΠΌΠ΅ΠΆΠ΄ΡΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½Π° ΡΠΊΠ°Π»Π°ΡΠ½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° Π·Π°ΠΌΡΠ½Π°) Π΅ ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠ΅Π½, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΈ, Π½Π°ΡΠ΅Π΄ Ρ Π΄ΡΡΠ³ΠΈ Π½Π΅ΡΠ°, ΡΠ΅Π³Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π° ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡΠ΅ ΠΈ Π²ΡΡΠ½Π°ΡΠΈΡΠ΅ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. Π ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ "-O2" Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° ΠΎΠΏΡΠΈΡΡΠ° "-finline-functions", ΠΊΠΎΡΡΠΎ Π΅ ΠΏΡΠ΅Π½Π°ΡΡΡΠΎΠ΅Π½Π°, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ° ΠΏΠΎ-ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΈΡ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. Π Π°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π΅Π²ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π΅ ΡΡΠΊΠΎΡΠ΅Π½Π°. ΠΠ²ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π·Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈΡΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠ° C++, ΡΠΎΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ°Π·Π±ΠΎΡΠ° Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° ΡΠΈΠΏ, Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π°.
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ (LTO). ΠΠΎΠ±Π°Π²Π΅Π½ Π½ΠΎΠ² ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ»
lto-ΠΈΠ·Ρ Π²ΡΡΠ»ΡΠΌ Π·Π° Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΎΠ±Π΅ΠΊΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ LTO Π±Π°ΠΉΡ ΠΊΠΎΠ΄. ΠΠ°ΡΠ°Π»Π΅Π»Π½ΠΈΡΠ΅ LTO ΠΏΡΠΎΠΏΡΡΠΊΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π±ΡΠΎΡ Π½Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ ΠΈ, Π°ΠΊΠΎ ΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π±ΡΠΎΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ ΡΠ΄ΡΠ° ΠΊΠ°ΡΠΎ ΡΠ°ΠΊΡΠΎΡ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅. ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° LTO Π±Π°ΠΉΡ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° zstd. - ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ Π΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡΡ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° (PGO - Profile-guided optimization), ΠΊΠΎΠΉΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΏΠΎ-ΠΎΠΏΡΠΈΠΌΠ°Π»Π΅Π½ ΠΊΠΎΠ΄ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΡΠΈΠ»ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π³ΠΎΡΠ΅ΡΠΎ/ΡΡΡΠ΄Π΅Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅. Π§ΡΠ΅Π· ΠΎΠΏΡΠΈΡΡΠ° "
-fprofile-ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Β» Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ»Π΅Π΄ΠΈ Π΄ΠΎ 4 ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΠΏΡΠΎΡΠΈΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΈΠ½Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎ-ΡΠΎΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΡΠΎΡΠΈΠ»Π°. - Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅, Π²Π½Π΅Π΄ΡΠ΅Π½Π° Π·Π° Π΅Π·ΠΈΡΠΈΡΠ΅ C, C++ ΠΈ Fortran
OpenACC 2.6 , ΠΊΠΎΠΉΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ°Π·ΡΠΎΠ²Π°ΡΠ²Π°ΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° GPU ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ ΠΊΠ°ΡΠΎ NVIDIA PTX. ΠΠ½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π΅ ΠΏΠΎΡΡΠΈ Π·Π°Π²ΡΡΡΠ΅Π½ΠΎΠΡΠ²ΠΎΡΠ΅ΡΠ΅ MP 5.0 (Open Multi-Processing), ΠΊΠΎΠΉΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° API ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π²ΡΡΡ Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄ΡΠ΅Π½ΠΈ ΠΈ Ρ ΠΈΠ±ΡΠΈΠ΄Π½ΠΈ (CPU+GPU/DSP) ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΡΡ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠΈ Π·Π° Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ (SIMD). ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ lastprivate, Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΈ Π·Π° ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠΈΠΊΡΠ», ΠΈΠ·ΡΠ°Π·ΠΈ Π·Π° ΠΏΠΎΡΡΡΠΊΠ° ΠΈ use_device_addr. ΠΠ° OpenMP ΠΈ OpenACC Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° ΡΠ°Π·ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ°ΡΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ AMD Radeon (GCN) ΠΎΡ ΡΠ΅ΡΠ²ΡΡΡΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ (Π€ΠΈΠ΄ΠΆΠΈ) ΠΈ ΠΏΠ΅ΡΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ (VEGA 10/VEGA 20). - ΠΠ° Π΅Π·ΠΈΡΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎΡΠΎ C Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° βΠ΄ΠΎΡΡΡΠΏβ, Π·Π° Π΄Π° ΠΎΠΏΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π΄ΠΎ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΏΡΠ΅Π΄Π°Π²Π°Π½ΠΈ ΡΡΠ΅Π· ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠ° ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π», ΠΈ Π΄Π° Π°ΡΠΎΡΠΈΠΈΡΠ° ΡΠ°ΠΊΠΈΠ²Π° ΠΎΠ±Π΅ΠΊΡΠΈ Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, ΡΡΠ΄ΡΡΠΆΠ°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅. ΠΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π²ΡΠ² Π²ΡΡΠ·ΠΊΠ° Ρ βΠ΄ΠΎΡΡΡΠΏβ, Π°ΡΡΠΈΠ±ΡΡΡΡ βΡΠΈΠΏβ Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½ Π΄ΠΎΡΡΡΠΏ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π² ΠΎΠ±Π»Π°ΡΡ ΠΈΠ·Π²ΡΠ½ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΌΠ°ΡΠΈΠ²Π°. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Π°ΡΡΠΈΠ±ΡΡΡΡ "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() {
Π²ΡΡΡΠ°Π½Π΅ Ο;
} - ΠΠ° Π΅Π·ΠΈΠΊΠ° C ΡΠ° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈ ΡΠ°ΡΡ ΠΎΡ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° C2X (Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π· ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° -std=c2x ΠΈ -std=gnu2x): ΠΏΠΎΡΠ²ΠΈ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° β[[]]β Π·Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ Π² C++ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ [[gnu ::const]], [[deprecated]], [[fallthrough]] ΠΈ [[maybe_unused]]. ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ "u8" Π·Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Ρ UTF-8 Π·Π½Π°ΡΠΈ.
ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΈ ΠΊΡΠΌ . ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½ΠΈΡ "%OB" ΠΈ "%Ob" ΠΊΡΠΌ strftime. - Π Π΅ΠΆΠΈΠΌΡΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° C Π΅ "-fno-common", ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° Π½ΡΠΊΠΎΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ.
- ΠΠ° C++ ΡΠ° Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 16 ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈ Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ° C++20. ΠΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π΅Π½Π°ΡΠ° ΠΊΠ»ΡΡΠΎΠ²Π° Π΄ΡΠΌΠ° βconstinitβ
ΠΈ Π΅ Π²ΡΠ²Π΅Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ "ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° ". ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈΡΠ΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Ρ Π½Π°Π±ΠΎΡΠ° ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ΅ΡΠΈ ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΈΠ·Π±ΡΠ³Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΠΈ Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. - G++ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΏΡΠΈΡΠΈΠ½Π΅Π½ΠΎ ΠΎΡ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΡΡΠ΅Π· constexpr. ΠΠ°ΠΌΠ°Π»Π΅Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΏΡΠΈ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° constexpr. ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ β-Wmismatched-tagsβ ΠΈ β-Wredundant-tagsβ.
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΎΠΏΡΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄:
- "-fallocation-dce" Π·Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° Π½Π΅Π½ΡΠΆΠ½ΠΈΡΠ΅ Π΄Π²ΠΎΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ "Π½ΠΎΠ²" ΠΈ "ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅".
- "-fprofile-partial-training" Π·Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π·Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅.
- "-fprofile-reproducible Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ Π½Π° ΠΏΡΠΎΡΠΈΠ»Π°.
- β-fprofile-prefix-pathβ, Π·Π° Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π·Π° ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠΈΠ» (Π·Π° β-fprofile-generate=profile_dirβ ΠΈ β-fprofile-use=profile_dirβ).
- Π ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡΠ΅Π»Π½ΠΈΡ ΡΠ΅ΠΊΡΡ Π·Π° ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ Ρ ΠΈΠΏΠ΅ΡΠ²ΡΡΠ·ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π΄ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π·Π° ΡΠ΅Π·ΠΈ ΠΎΠΏΡΠΈΠΈ. ΠΠ°ΠΌΡΠ½Π°ΡΠ° Π½Π° URL ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΎΠΏΡΠΈΡΡΠ° "-fdiagnostics-urls".
- ΠΠΎΠ±Π°Π²Π΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π·Π° ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΠΎΡ "
__ΠΈΠΌΠ°_Π²Π³ΡΠ°Π΄Π΅Π½ β, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. - ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π½ΠΎΠ²Π° Π²Π³ΡΠ°Π΄Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ "__builtin_roundeven" Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π·Π° Π·Π°ΠΊΡΡΠ³Π»ΡΠ²Π°Π½Π΅, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° ISO/IEC TS 18661, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° "ΠΊΡΡΠ³Π»Π°", Π½ΠΎ Π·Π°ΠΊΡΡΠ³Π»ΡΡΠ° ΡΠ°ΡΡ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° ΠΎΡ 0.5 Π½Π°Π³ΠΎΡΠ΅ (Π΄ΠΎ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ), ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠ° ΠΎΡ 0.5 - Π½Π°Π΄ΠΎΠ»Ρ (Π΄ΠΎ Π½ΡΠ»Π°), ΠΈ ΡΠ°Π²Π½ΠΎ Π½Π° 0.5 - Π·Π°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ ΠΏΠ°ΡΠΈΡΠ΅ΡΠ° Π½Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠΈΡΡΠ°.
- ΠΠ° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° AArch64 Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ SVE2 ΠΈ Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° SVE (Scalable Vector Extension), Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ SVE ACLE ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° LSE (Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ) ΠΈ TME (ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ) Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½Π°. ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ Π² Armv8.5-A ΠΈ Armv8.6-A, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΡΠΈΡΠ»Π°, Π·Π°ΠΊΡΡΠ³Π»ΡΠ½Π΅, ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΡΠ°Π³ΠΎΠ²Π΅ Ρ ΠΏΠ°ΠΌΠ΅Ρ,
bfloat16 ΠΈ ΠΌΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ
Arm Cortex-A77,
Arm Cortex-A76AE,
Arm Cortex-A65,
Arm Cortex-A65AE,
Arm Cortex-A34 ΠΈ
Marvell ThunderX3. - ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ABI FDPIC (32-Π±ΠΈΡΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ) Π·Π° ARM64. ΠΡΠ΅ΡΠ°Π±ΠΎΡΠ΅Π½Π° ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° 64-Π±ΠΈΡΠΎΠ²ΠΈ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π°. ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°
Arm Cortex-A77,
Arm Cortex-A76AE ΠΈ
Π ΡΠΊΠ° Cortex-M35P. Π Π°Π·ΡΠΈΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ ACLE, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ 32-Π±ΠΈΡΠΎΠ² SIMD, 16-Π±ΠΈΡΠΎΠ²ΠΎ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ° Ρ Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° DSP Π°Π»Π³ΠΎΡΠΈΡΡΠΌ. ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ACLE CDE (Custom Datapath Extension) ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. - ΠΠ½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° AMD Π³ΡΠ°ΡΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° GCN.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° XMEGA-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π·Π° AVR Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°
ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609 3208, ATmega3209, ATmega4808 4809, ATmegaXNUMX ΠΈ ATmegaXNUMX. - ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ Π½ΠΎΠ²ΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π° Intel ENQCMD (-menqcmd) Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ IA-32/x86-64. ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ Intel Cooperlake (-march=cooperlake, Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ AVX512BF16 ISA) ΠΈ Tigerlake (-march=tigerlake, Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡΡΠ° MOVDIRI, MOVDIR64B ΠΈ AVX512VP2INTERSECT ISA).
- ΠΠ½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° HSAIL (ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° Ρ Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°) Π·Π° Ρ Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π½ΠΈ ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° HSA, Π΅ ΠΎΡΡ Π²ΡΡΠ»Π΅Π½ΠΎ ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°ΡΠΎ Π² Π±ΡΠ΄Π΅ΡΠ° Π²Π΅ΡΡΠΈΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru