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
