ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Bend Ρ€Π°Π·Π²ΠΈΠ²Π° високонаглСдСн Π΅Π·ΠΈΠΊ Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΈ изчислСния Π½Π° GPU

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ са ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ издания Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Bend, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° високоСфСктивСн Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΈ изчислСния, ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½ ΠΊΠ°Ρ‚ΠΎ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° ниско Π½ΠΈΠ²ΠΎ Π΅Π·ΠΈΡ†ΠΈ, ΠΊΠ°Ρ‚ΠΎ CUDA ΠΈ Metal, с ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅Π»Π΅Π½ синтаксис ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° повишаванС Π½Π° удобството Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΏΡ€ΠΈΡΡŠΡ‰ΠΈ Π·Π° Π΅Π·ΠΈΡ†ΠΈ ΠΊΠ°Ρ‚ΠΎ Python ΠΈ Haskell. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ написан Π½Π° Rust ΠΈ сС разпространява ΠΏΠΎΠ΄ лицСнзия Apache 2.0.

Π‘Ρ€Π΅Π΄ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Bend сС ΠΎΡ‚Π»ΠΈΡ‡Π°Π²Π°Ρ‚ Π±ΡŠΡ€Π·ΠΎΡ‚ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ висш Ρ€Π΅Π΄, затваряния, ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΡ, Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° рСкурсия, съвпадСниС с шаблон, рСкурсивни съвпадСния (fold) ΠΈ Ρ†ΠΈΠΊΠ»ΠΈ (bend), Ρ†Π΅Π»ΠΈ числа, стрингови ΠΈ ΡΠΏΠΈΡΡŠΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅. ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ сС Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π½Π° синтаксиса β€” Π² стил Python ΠΈ Π² стил Haskell. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, явно създаванС Π½Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΈ поставянС Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ. ΠŸΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΡΡ‚Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ изчисляванС Π½Π° ΠΈΠ·Ρ€Π°Π·Π° β€ž((1 + 2) + (3 + 4))β€œ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ β€ž1 + 2β€œ ΠΈ β€ž3 + 4β€œ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ изпълнСни ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Bend ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π½Π° ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅, осигуряващо масивСн ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° GPU, дСмонстрирайки практичСски Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ нарастванС Π½Π° производитСлността Π² зависимост ΠΎΡ‚ броя Π½Π° изчислитСлнитС ядра. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° Π΅Π·ΠΈΠΊΠ° Bend сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² нискоуровнСво ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ прСдставянС HVM2 (Higher-order Virtual Machine 2), ΠΊΠΎΠ΅Ρ‚ΠΎ слСд Ρ‚ΠΎΠ²Π° сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² прСдставянС Π½Π° C ΠΈ CUDA. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° само изпълнСниС Π½Π° GPU ΠΎΡ‚ NVIDIA.

Π©ΠΎ сС отнася Π΄ΠΎ производитСлността, тСстовото ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с рСализация Π½Π° Π±ΠΈΡ‚ΠΎΠ½Π½Π° сортировка, ΠΏΡ€ΠΈ изпълнСниС Π² Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° CPU Apple M3 Max Π΅ Π±ΠΈΠ»ΠΎ изпълнСно Π·Π° 12.15 сСк., ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° 16 ΠΏΠΎΡ‚ΠΎΠΊΠ° β€” Π·Π° 0.96 сСк., Π° ΠΏΡ€ΠΈ Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π΅ Π½Π° GPU NVIDIA RTX 4090 с 16k ΠΏΠΎΡ‚ΠΎΠΊΠ° β€” Π·Π° 0.21 сСк. def sort(d, s, tree): switch d: case 0: return tree case _: (x,y) = tree lft = sort(d-1, 0, x) rgt = sort(d-1, 1, y) return rots(d, s, lft, rgt) def rots(d, s, tree): switch d: case 0: return tree case _: (x,y) = tree return down(d, s, warp(d-1, s, x, y)) …

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster