π12π₯3
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ ΠΎΠ±Π·ΠΎΡΡ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ Zen5.
Π‘Π»Π°ΠΉΠ΄Ρ ΠΎΡ AMD Ρ ΠΈΠ½ΡΠΎΠΉ ΠΎ ΠΌ/Π° ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΠ°, Π΄Π°ΡΡΠ΅Π΅ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π΅ΡΠ°Π»Π΅ΠΉ.
Zen4's AVX512 Teardown ΠΎΡ Mystical (Π°Π²ΡΠΎΡΠ° y-cruncher).
Zen5's AVX512 Teardown + More... ΠΎΡ Π½Π΅Π³ΠΎ ΠΆΠ΅. ΠΡΠ°ΡΠΊΠΎ - Π²ΡΠ΅ SIMD ALU Π±ΡΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½Ρ Ρ 256 Π΄ΠΎ 512 Π±ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π° AVX-512 ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎ 2-ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΠ²Ρ Π½Π° Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ SIMD/FPU ΠΊΠΎΠ΄Π΅ (ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠΌ, 128/256-Π±ΠΈΡΠ½ΠΎΠΌ) - Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅Π½ΡΠΎΠ². ΠΠ»ΡΡ, Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡΡ Π²ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π² SIMD ALU 1-ΡΠ°ΠΊΡΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ²Π΅Π»ΠΈΡΠΈΠ»Π°ΡΡ Π΄ΠΎ 2 ΡΠ°ΠΊΡΠΎΠ².
ΠΠ΄Π΅ΡΡ ΡΠΎΠ±ΡΠ°Π½Ρ ΠΎΠ±Π·ΠΎΡΡ Zen5 Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ (ΡΠΊΠΎΡΠΎΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ).
Π‘Π»Π°ΠΉΠ΄Ρ ΠΎΡ AMD Ρ ΠΈΠ½ΡΠΎΠΉ ΠΎ ΠΌ/Π° ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΠ°, Π΄Π°ΡΡΠ΅Π΅ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π΅ΡΠ°Π»Π΅ΠΉ.
Zen4's AVX512 Teardown ΠΎΡ Mystical (Π°Π²ΡΠΎΡΠ° y-cruncher).
Zen5's AVX512 Teardown + More... ΠΎΡ Π½Π΅Π³ΠΎ ΠΆΠ΅. ΠΡΠ°ΡΠΊΠΎ - Π²ΡΠ΅ SIMD ALU Π±ΡΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½Ρ Ρ 256 Π΄ΠΎ 512 Π±ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π° AVX-512 ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎ 2-ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΠ²Ρ Π½Π° Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ SIMD/FPU ΠΊΠΎΠ΄Π΅ (ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠΌ, 128/256-Π±ΠΈΡΠ½ΠΎΠΌ) - Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅Π½ΡΠΎΠ². ΠΠ»ΡΡ, Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡΡ Π²ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π² SIMD ALU 1-ΡΠ°ΠΊΡΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ²Π΅Π»ΠΈΡΠΈΠ»Π°ΡΡ Π΄ΠΎ 2 ΡΠ°ΠΊΡΠΎΠ².
ΠΠ΄Π΅ΡΡ ΡΠΎΠ±ΡΠ°Π½Ρ ΠΎΠ±Π·ΠΎΡΡ Zen5 Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ (ΡΠΊΠΎΡΠΎΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ).
π5β€4
β‘οΈΠΠΈΠ΄Π΅ΠΎ When Nanoseconds Matter: Ultrafast Trading Systems
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ Π»Π΅ΠΊΡΠΈΡ ΠΎΡ David Gross ΠΈΠ· Optiver ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΈΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΡ ΡΠΎΡΠ³ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ:
- ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ L3 ΠΎΡΠ΄Π΅ΡΠ±ΡΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΊΠ°ΡΡ Π² Π½Π΅ΠΌ.
- Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΊΠΎΠ΄Π΅ SPMC bounded ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π² shared memory.
- ΠΈΠ΄Π΅Ρ spawn'ΠΈΡΡ perf ΠΏΡΡΠΌΠΎ ΠΈΠ· ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
- Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ likely/unlikely/cold ΡΠ΅ΠΊΡΠΈΡΡ Π² ΠΊΠΎΠ΄Π΅.
- ΡΠΏΠΎΠΌΠ½ΡΠ½ΡΠ» ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Π²ΡΠΈΠ³ΡΡΡ Π΄Π°ΡΡ kernel bypass ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ΅ΡΡΡ.
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ clang xray Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅.
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ Π»Π΅ΠΊΡΠΈΡ ΠΎΡ David Gross ΠΈΠ· Optiver ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΈΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΡ ΡΠΎΡΠ³ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ:
- ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ L3 ΠΎΡΠ΄Π΅ΡΠ±ΡΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΊΠ°ΡΡ Π² Π½Π΅ΠΌ.
- Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΊΠΎΠ΄Π΅ SPMC bounded ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π² shared memory.
- ΠΈΠ΄Π΅Ρ spawn'ΠΈΡΡ perf ΠΏΡΡΠΌΠΎ ΠΈΠ· ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
- Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ likely/unlikely/cold ΡΠ΅ΠΊΡΠΈΡΡ Π² ΠΊΠΎΠ΄Π΅.
- ΡΠΏΠΎΠΌΠ½ΡΠ½ΡΠ» ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Π²ΡΠΈΠ³ΡΡΡ Π΄Π°ΡΡ kernel bypass ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ΅ΡΡΡ.
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ clang xray Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅.
YouTube
When Nanoseconds Matter: Ultrafast Trading Systems in C++ - David Gross - CppCon 2024
https://cppcon.orgβ
CppCon 2024 Early Access: https://cppcon.org/early-access
Access All 2024 Session Videos Ahead of Their Official Release To YouTube. At least 30 days exclusive access through the Early Access system. Videos will be released to the CppConβ¦
CppCon 2024 Early Access: https://cppcon.org/early-access
Access All 2024 Session Videos Ahead of Their Official Release To YouTube. At least 30 days exclusive access through the Early Access system. Videos will be released to the CppConβ¦
π2β€1π₯1
Forwarded from ΠΠ°ΠΏΠΈΡΠΊΠΈ CPU designer'a (ΠΠΈΠΊΠΎΠ»Π°ΠΉ)
ΠΠΎΠ΄Π±ΠΎΡΠΊΠ° ΠΌΠΈΠΊΡΠΎΠ°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ
Π±Π»ΠΎΠΊ-Π΄ΠΈΠ°Π³ΡΠ°ΠΌ ΡΠ΄Π΅Ρ ΠΎΡ Intel, AMD, ARM, Ampere.
Block Diagrams: http://bit.ly/32qLLew
ΞΌarch Cheat Sheet: http://bit.ly/2JTplfJ
ΠΠ»Ρ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΡΠ΄ΡΠΎ Apple A15 (ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π² ΠΏΠΎΠ΄Π±ΠΎΡΠΊΠ΅) Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° Π±Π°Π·Π΅ RISC-V ΠΎΡ Sifive P870 Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»ΠΈ Syntacore SCR7/9.
Block Diagrams: http://bit.ly/32qLLew
ΞΌarch Cheat Sheet: http://bit.ly/2JTplfJ
ΠΠ»Ρ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΡΠ΄ΡΠΎ Apple A15 (ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π² ΠΏΠΎΠ΄Π±ΠΎΡΠΊΠ΅) Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° Π±Π°Π·Π΅ RISC-V ΠΎΡ Sifive P870 Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»ΠΈ Syntacore SCR7/9.
π4π₯2
Forwarded from this->notes.
#cpp
ΠΡΠ΅ΠΌΡ -- Π΄Π΅Π½ΡΠ³ΠΈ.
Π‘ΡΠ°Π½Π΄Π°ΡΡ Π³ΠΎΠ²ΠΎΡΠΈΡ [ΡΠΏΡΠΎΡΠ°Ρ], ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°ΠΌ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ, ΡΡΠΎ ΡΠΆΠ΅ Π΅Π³ΠΎ Π΄Π΅Π»ΠΎ.
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ.
O0 (ΠΎ Π½ΠΎΠ»Ρ)
ΠΠ°Π·Π°. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π΅Π»Π°Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ. Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½Π°Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ΅ΡΠΎΠ»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎ Π΄Π»Ρ Π΄Π΅Π±Π°Π³Π°.
O1
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΡΠΎΡΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅Π· ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°: dead code elimination, constant propagation, basic inlining.
Π£ GCC ΡΡΡ ΡΠΆΠ΅ 48 ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π΄ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (Π΄ΡΡΠ³ ΠΎΡΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΡΠ³ΠΈΠ½Π°Π»Π°ΠΌ).
O2
Π‘Π°ΠΌΡΠΉ Π½Π°ΡΠΎΠ΄Π½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ.
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π±Π΅Π· speed-space ΡΡΠ΅ΠΉΠ΄ΠΎΡΠ°: unroll loops, vectorization, strict aliasing.
O3
ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΡΠΎΠΌΠ°Π½Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΡ ΡΠ°Π΄ΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ. ΠΠΎΠ»Π΅Π΅ Π°Π³ΡΠ΅ΡΡΠΈΠ²Π½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠΈΠΊΠ»Ρ, Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠΌ, Π±ΠΎΠ»ΡΡΠ΅ Π²Π΅ΠΊΡΠΎΡΠΈΠ·ΠΈΡΡΠ΅ΠΌ. ΠΠ·-Π·Π° ΡΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠ½Π³Π° Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·Π΄ΡΠ²Π°ΡΡΡΡ. Π ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ°Π΄Π°ΡΡ, ΡΠ°ΠΊ ΡΡΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ (ΠΏΡΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ instruction cache Π²Ρ ΡΡΠ°Π½Π΅ΡΠ΅ ΡΠ°ΡΠ΅ ΠΊΠ΅ΡΠΌΠΈΡΡΠΈΡΡ).
ΠΡΠ»ΠΈ ΡΠ²Π»Π΅ΠΊΠ°Π΅ΡΠ΅ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΠ΄ Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡΠ½ΠΎ Π² ΠΏΠ»ΡΡΠ΅. ΠΠ΅ Π·Π°Π΄Π΅Π²Π°Ρ Π²ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅.
Ofast
ΠΠ°ΠΊ O3, Π½ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠΎΡΠ΅ΠΌΡ ΠΎΠΏΠ°ΡΠ½ΡΠ΅? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π·Π° ΡΡΡΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π² Beware of fast-math.
Og (ΠΎΡΠ΄ΠΆΠΈ)
Og = O0 + Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ· O1, Π½Π΅ ΡΡ ΡΠ΄ΡΠ°ΡΡΠΈΠ΅ debug experience.
Os
Os = ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ· O2, Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° + Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ΡΠ΅ΠΉΠ΄ΠΎΡΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Π² ΠΌΠ΅ΡΡ.
Oz
ΠΠΎΠ³Π΄Π° Ρ Π²Π°Ρ ΠΌΠΎΡΠ½Π΅ΠΉΡΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Oz. ΠΠ°ΠΎΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ°Π΄ΠΈΡΡ ΠΈ ΠΏΠ΅ΡΡ. ΠΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π² embedded ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΊ.
ΠΠΎΠΆΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΊΠΎΠ»-Π²ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π΅ΡΠ»ΠΈ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΊΠΎΠ»-Π²ΠΎΠΌ Π±Π°ΠΉΡΠΎΠ².
ΠΠ΅Π±Π°Π³Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠΆΠ΅ ΡΠΆΠ΅ Π½Π΅ΡΠ΅Π°Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΠ½ΠΎ. ΠΠΎ ΠΊΠ°ΠΊ Π΅ΡΡΡ.
ΠΡ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ LTO (ΠΈ ThinLTO) ΠΈ PGO. ΠΡ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ -march=... ΠΈ Π΄ΡΡΠ³ΠΈΠ΅. ΠΠΎΠΆΠ΅Ρ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΡΠΎΠΌ..
ΠΠΎΠΊΠ»Π°Π΄ Π² ΡΠ΅ΠΌΡ: What GCC optimization level is best for you?
Π Π΄ΠΎΠΊΠ»Π°Π΄Π΅ ΠΏΡΠΎ ΡΠ°ΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ LLVM Π² ΡΠ°Π·Π½ΡΡ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠΎΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄ Π²Π°ΡΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π½ΡΠΆΠ΄Ρ, Ρ.ΠΊ. ΡΡΠ΅ΠΉΠ΄ΠΎΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅.
ΠΡΠ΅ΠΌΡ -- Π΄Π΅Π½ΡΠ³ΠΈ.
Π‘ΡΠ°Π½Π΄Π°ΡΡ Π³ΠΎΠ²ΠΎΡΠΈΡ [ΡΠΏΡΠΎΡΠ°Ρ], ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°ΠΌ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ, ΡΡΠΎ ΡΠΆΠ΅ Π΅Π³ΠΎ Π΄Π΅Π»ΠΎ.
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ.
O0 (ΠΎ Π½ΠΎΠ»Ρ)
ΠΠ°Π·Π°. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π΅Π»Π°Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ. Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½Π°Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ΅ΡΠΎΠ»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎ Π΄Π»Ρ Π΄Π΅Π±Π°Π³Π°.
O1
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΡΠΎΡΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅Π· ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°: dead code elimination, constant propagation, basic inlining.
Π£ GCC ΡΡΡ ΡΠΆΠ΅ 48 ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π΄ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (Π΄ΡΡΠ³ ΠΎΡΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΡΠ³ΠΈΠ½Π°Π»Π°ΠΌ).
O2
Π‘Π°ΠΌΡΠΉ Π½Π°ΡΠΎΠ΄Π½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ.
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π±Π΅Π· speed-space ΡΡΠ΅ΠΉΠ΄ΠΎΡΠ°: unroll loops, vectorization, strict aliasing.
O3
ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΡΠΎΠΌΠ°Π½Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΡ ΡΠ°Π΄ΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ. ΠΠΎΠ»Π΅Π΅ Π°Π³ΡΠ΅ΡΡΠΈΠ²Π½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠΈΠΊΠ»Ρ, Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠΌ, Π±ΠΎΠ»ΡΡΠ΅ Π²Π΅ΠΊΡΠΎΡΠΈΠ·ΠΈΡΡΠ΅ΠΌ. ΠΠ·-Π·Π° ΡΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠ½Π³Π° Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·Π΄ΡΠ²Π°ΡΡΡΡ. Π ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ°Π΄Π°ΡΡ, ΡΠ°ΠΊ ΡΡΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ (ΠΏΡΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ instruction cache Π²Ρ ΡΡΠ°Π½Π΅ΡΠ΅ ΡΠ°ΡΠ΅ ΠΊΠ΅ΡΠΌΠΈΡΡΠΈΡΡ).
ΠΡΠ»ΠΈ ΡΠ²Π»Π΅ΠΊΠ°Π΅ΡΠ΅ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΠ΄ Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡΠ½ΠΎ Π² ΠΏΠ»ΡΡΠ΅. ΠΠ΅ Π·Π°Π΄Π΅Π²Π°Ρ Π²ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅.
Ofast
ΠΠ°ΠΊ O3, Π½ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ
--ffast-math.ΠΠΎΡΠ΅ΠΌΡ ΠΎΠΏΠ°ΡΠ½ΡΠ΅? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π·Π° ΡΡΡΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π² Beware of fast-math.
Og (ΠΎΡΠ΄ΠΆΠΈ)
Og = O0 + Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ· O1, Π½Π΅ ΡΡ ΡΠ΄ΡΠ°ΡΡΠΈΠ΅ debug experience.
Os
Os = ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ· O2, Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° + Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ΡΠ΅ΠΉΠ΄ΠΎΡΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Π² ΠΌΠ΅ΡΡ.
Oz
ΠΠΎΠ³Π΄Π° Ρ Π²Π°Ρ ΠΌΠΎΡΠ½Π΅ΠΉΡΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Oz. ΠΠ°ΠΎΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ°Π΄ΠΈΡΡ ΠΈ ΠΏΠ΅ΡΡ. ΠΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π² embedded ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΊ.
ΠΠΎΠΆΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΊΠΎΠ»-Π²ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π΅ΡΠ»ΠΈ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΊΠΎΠ»-Π²ΠΎΠΌ Π±Π°ΠΉΡΠΎΠ².
ΠΠ΅Π±Π°Π³Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠΆΠ΅ ΡΠΆΠ΅ Π½Π΅ΡΠ΅Π°Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΠ½ΠΎ. ΠΠΎ ΠΊΠ°ΠΊ Π΅ΡΡΡ.
ΠΡ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ LTO (ΠΈ ThinLTO) ΠΈ PGO. ΠΡ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ -march=... ΠΈ Π΄ΡΡΠ³ΠΈΠ΅. ΠΠΎΠΆΠ΅Ρ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΡΠΎΠΌ..
ΠΠΎΠΊΠ»Π°Π΄ Π² ΡΠ΅ΠΌΡ: What GCC optimization level is best for you?
Π Π΄ΠΎΠΊΠ»Π°Π΄Π΅ ΠΏΡΠΎ ΡΠ°ΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ LLVM Π² ΡΠ°Π·Π½ΡΡ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠΎΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄ Π²Π°ΡΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π½ΡΠΆΠ΄Ρ, Ρ.ΠΊ. ΡΡΠ΅ΠΉΠ΄ΠΎΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅.
β€1π1
Forwarded from ΠΠ»ΠΎΠ³*
#prog #article
Advent of compiler optimizations β ΡΠ±ΠΎΡΠ½ΠΈΠΊ Π΄Π΅ΠΊΠ°Π±ΡΡΡΠΊΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π² Π΄Π΅Π½Ρ (Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Ρ ΡΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅), Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ². ΠΠ°ΠΏΠΈΡΠ°Π½ΠΎ ΠΡΡΡΠΎΠΌ ΠΠΎΠ΄Π±ΠΎΠ»ΡΠΎΠΌ (Π΄Π°-Π΄Π°, ΡΠΎΡ ΡΠ°ΠΌΡΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ godbolt.org).
Advent of compiler optimizations β ΡΠ±ΠΎΡΠ½ΠΈΠΊ Π΄Π΅ΠΊΠ°Π±ΡΡΡΠΊΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π² Π΄Π΅Π½Ρ (Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Ρ ΡΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅), Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ². ΠΠ°ΠΏΠΈΡΠ°Π½ΠΎ ΠΡΡΡΠΎΠΌ ΠΠΎΠ΄Π±ΠΎΠ»ΡΠΎΠΌ (Π΄Π°-Π΄Π°, ΡΠΎΡ ΡΠ°ΠΌΡΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ godbolt.org).
π2π₯1
Forwarded from ΠΠ°ΠΏΠΈΡΠΊΠΈ CPU designer'a
ΠΠ΅ΠΊΡΠΈΡ ΠΎ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅ x86-ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Intel Skylake.
Π Π°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ out-of-order CPU: ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ x86-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² ΠΌΠΈΠΊΡΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Β΅ops), Π²Π½Π΅ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ΅ΠΊΡΠΎΡ: ΠΡΡΡ ΠΠΎΠ΄Π±ΠΎΠ»Ρ
Π‘ΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ Compiler Explorer, C++-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠΈΠ·Π°ΡΠΎΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ².
Π Π°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ out-of-order CPU: ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ x86-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² ΠΌΠΈΠΊΡΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Β΅ops), Π²Π½Π΅ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ΅ΠΊΡΠΎΡ: ΠΡΡΡ ΠΠΎΠ΄Π±ΠΎΠ»Ρ
Π‘ΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ Compiler Explorer, C++-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠΈΠ·Π°ΡΠΎΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ².
π2πΎ2