ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ 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