Avaldatud on projekti Bend esimesed väljaanded, mis arendab kõrgetasemelist programmeerimiskeelt paralleelsete arvutuste jaoks, mis positsioneerib end madalama taseme keelte, nagu CUDA ja Metal, alternatiivina, omades väljendusrikast süntaksit ja arendusmugavust, mis on iseloomulikud sellistele keeledele nagu Python ja Haskell. Projekti kood on kirjutatud Rust keeles ja jagatakse Apache 2.0 litsentsi alusel.
Bendi keele võimalustest tasub mainida objektide kiiret jaotamist, kõrgema järgu funktsioonide, sulgude, jätkude, piiramatu rekursiooni, mustrites vastavuse, rekursiivsete vastavuste (fold) ja tsüklite (bend), ühetaseme, stringide ja nimekirjade tüüpide kasutamise võimalust. Toetatakse kahte süntaaksivarianti — Python stiilis ja Haskell stiilis. Programmides ei ole vaja näidata juhtimisparalleelsuse annotatsioone, luua vooge ja seada lukke. Paralleelne töötlemine toimub automaatselt, näiteks väljendi „((1 + 2) + (3 + 4))” arvutamisel teostatakse tegevused „1 + 2” ja „3 + 4” paralleelselt.
Bendi keele programmid saavad töötada varustuses, mis toetab massilist paralleelsust, näiteks GPU-del, näidates praktiliselt lineaarset jõudluse kasvu vastavalt arvutusühingute arvule. Bendi keeles kirjutatud kood kompileeritakse madala taseme vahepeatesse HVM2 (Higher-order Virtual Machine 2), mis seejärel kompileeritakse C ja CUDA esitusvormiks. Praegu toetab projekt ainult NVIDIA GPU-de peal töötamist.
Jõudluse osas viidi testrakendus, mis tegeleb bitoonilise sortimise rakendusega, Apple M3 Max CPU ühes lõimes ellu 12,15 sekundi jooksul, 16 lõime kasutades 0,96 sekundi jooksul ja NVIDIA RTX 4090 GPU 16k lõime kasutades vaid 0,21 sekundi jooksul. 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)) …
Allikas: opennet.ru
