Esitatud on Bend projekti esimesed väljaanded, mis arendab kõrgema taseme programmeerimiskeelt paralleelsete arvutuste jaoks. See on alternatiiv madala taseme keeltele nagu CUDA ja Metal, millel on väljendusrikas süntaks ning arenduse mugavuse parandamise võimalused, mis on iseloomulikud sellistele keeltele nagu Python ja Haskell. Projekti kood on kirjutatud Rust keeles ja see levitatakse Apache 2.0 litsentsi all.
Bend keele võimalustest tulevad esile kiire objektide jaotamine, kõrgema järgu funktsioonide, sulgete, jätkude, piiramatute rekursioonide, mustrite sobitamise, rekursiivsete sobitamiste (fold) ja tsüklite (bend) kasutamine, täisarvude, stringide ja loendite tüübid. Toetatakse kahte süntaksivarianti - Python stiilis ja Haskell stiilis. Programmid ei vaja juhtimise paraleliseerimise annotatsiooni, selgeid niitide loomisi ega lukustuste seadmist. Paraleliseerimine toimub automaatselt, näiteks väljendi "((1 + 2) + (3 + 4))" arvutamisel, operatsioonid "1 + 2" ja "3 + 4" teostatakse paralleelselt.
Bend keeles kirjutatud programmid võivad töötada massiivse paralleelsuse tagava riistvara, näiteks GPU, peal, näidates peaaegu lineaarselt kasvu jõudluses, mis sõltub arvutuslike tuumade arvust. Bend keeles kirjutatud kood kompileeritakse madala taseme vaheformaatidesse HVM2 (Higher-order Virtual Machine 2), mis kompileeritakse seejärel C ja CUDA formaati. Praegu toetab projekt ainult täitmist NVIDIA GPU-del.
Jõudluse osas võeti testrakendus, millel on implementeeritud bitoni sorteerimine, ühe CPU Apple M3 Maxi töötluses kestsis 12,15 sek., 16 niidiga 0,96 sek. ja NVIDIA RTX 4090 GPU 16k niidiga 0,21 sek. 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
