Π§Π°ΡΡΡ 3. ΠΠ΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° Go: CGo, ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°, Π±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΡΠ°ΡΡΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ , ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΡΡ ΡΡΠΊΠΎΡΠΈΡΡ Go-ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ SIMD-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ΅ΡΠ΅Π· Go-Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ. ΠΠ°ΠΏΠΈΡΠ°Π»ΠΈ ΠΏΡΠΎΡΡΡΡ, Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ sliceContains ΠΈ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Π°Ρ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π² 10β14 ΡΠ°Π· ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΡΠ°ΡΡΠΈ ΠΏΠΎΠ³ΡΡΠ·ΠΈΠ»ΠΈΡΡ Π² ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ SIMD Π² Go-Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ SliceContainsV1 ΠΈ ΠΈΠ·ΡΡΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ VADD, VDUP ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ 10β14-ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΡ
Π·Π°Π΄Π°Ρ. ΠΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Go-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° ΡΡΠΎΠΌ Π½Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ. Π ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΌΡ ΠΏΠΎΠΉΠ΄ΡΠΌ Π΄Π°Π»ΡΡΠ΅: ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅Ρ
Π½ΠΈΠΊΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ β ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ C-ΠΊΠΎΠ΄Π° ΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° Intel. ΠΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π²Π½Π΅Π΄ΡΡΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½-ΠΊΠΎΠ΄, Π½Π΅ Π±ΠΎΡΡΡ Π·Π° Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Go-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΡΠΈΠ²Π΅Ρ, Π₯Π°Π±Ρ! ΠΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ ΠΠ³ΠΎΡΡ ΠΠ°Π½Π°ΡΡΠΊ, Ρ ΡΠ°Π±ΠΎΡΠ°Ρ Π² Π―Π½Π΄Π΅ΠΊΡ, ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Ρ Π² ΠΠ’ΠΠ, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΡΡΡΠΏΠ°Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡ
, Π΄Π΅Π»ΡΡΡ ΠΎΠΏΡΡΠΎΠΌ Π² ΡΠΎΡΡΠ΅ΡΡΡ
ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ Go-ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°, Π²Π΅Π΄Ρ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π» ΠΈ youtube-ΠΊΠ°Π½Π°Π». ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΡΠ΅Ρ
Π½ΠΈΠΊΠ°ΠΌΠΈ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΡΡΠ° ΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π³Π»ΡΠ±ΠΆΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Go-ΠΊΠΎΠ΄Π° ΠΈ Π½Π° ΡΡΠΎ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ.
https://habr.com/ru/companies/oleg-bunin/articles/905972/
#golang #optimizations #ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ #gccgo #gollvm #Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ #word #byte #ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ