Janë publikuar versionet e para të projektit Bend, që po zhvillon një gjuhë programimi të nivelit të lartë për llogaritjet paralele, e cila pozicionohet si një alternativë ndaj gjuhëve me nivel më të ulët, si CUDA dhe Metal, me një sintaksë të shprehur dhe mundësi për të rritur lehtësinë e zhvillimit, të ngjashme me ato në gjuhë si Python dhe Haskell. Kodi i projektit është shkruar në gjuhën Rust dhe shpërndahet nën licencën Apache 2.0.
VeçoritĂ« e gjuhĂ«s Bend pĂ«rfshijnĂ« shpĂ«rndarjen e shpejtĂ« tĂ« objekteve, mundĂ«sinĂ« e pĂ«rdorimit tĂ« funksioneve tĂ« larta, mbylljeve, vazhdimeve, rekursivitetit tĂ« pakufizuar, pĂ«rputhjes me modele, pĂ«rputhjeve rekursive (fold) dhe cikleve (bend), si dhe tipeve tĂ« numrave tĂ« plotĂ«, vargjeve dhe listave. JanĂ« tĂ« mbĂ«shtetur dy variante sintakse â nĂ« stilin Python dhe nĂ« stilin Haskell. NĂ« programet e shkruara, nuk kĂ«rkohet pĂ«rshkrimi i anotacioneve tĂ« menaxhimit tĂ« paralelizmit, krijimi i qarkullimeve tĂ« qarta dhe vendosja e bllokimeve. Paralelizimi bĂ«het automatikisht, pĂ«r shembull, kur llogaritet shprehja "((1 + 2) + (3 + 4))", operacionet "1 + 2" dhe "3 + 4" do tĂ« kryhen paralelisht.
Programet e shkruara në gjuhën Bend mund të ekzekutohen në pajisje që ofrojnë paralelizëm masiv, si p.sh. në GPU, duke treguar një rritje praktikisht linjare të performancës në varësi të numrit të njësive llogaritëse. Kodi në gjuhën Bend kompozohet në një përfaqësim të ulët HVM2 (Higher-order Virtual Machine 2), i cili pastaj kompozohet në një përfaqësim në C dhe CUDA. Aktualisht projekti mbështet vetëm ekzekutimin në GPU-në NVIDIA.
Sa i përket performancës, aplikacioni testues me implementimin e renditjes dyfishe u ekzekutua për 12.15 sekonda në një të vetme CPU Apple M3 Max, ndërsa me 16 thread u ekzekutua për 0.96 sekonda, dhe me angazhimin e GPU NVIDIA RTX 4090 me 16k thread për 0.21 sekonda. 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))
Burimi: opennet.ru
