Janë publikuar numrat e parë të projektit Bend, i cili zhvillon një gjuhë programimi me nivel të lartë për llogaritjet paralele, e cila pozicionohet si një alternativë ndaj gjuhëve me nivel të ulët, si CUDA dhe Metal, dhe ofron një sintaksë të shprehshme dhe mundësi për të rritur lehtësinë e zhvillimit, karakteristike për gjuhë si Python dhe Haskell. Kodi i projektit është shkruar në gjuhën Rust dhe shpërndahet nën licencën Apache 2.0.
Nga mundësitë e gjuhës Bend, përmendet shpërndarja e shpejtë e objekteve, mundësia për të përdorur funksione të nivelit të lartë, mbyllje, vazhdime, rekursioni të pakufizuar, përputhje me modele, përputhje rekursive (fold) dhe cikle (bend), tipa të numrave të plotë, stringjeve dhe listave. Mbështetet dy variantet e sintaksës - në stilin Python dhe në stilin Haskell. Në programe nuk nevojitet specifikimi i anotacioneve për menaxhimin e paralelizmit, krijimi eksplicit i rrjedhave dhe vendosja e bloqeve. Paralelizmi realizohet automatikisht; për shembull, kur llogaritet shprehja "((1 + 2) + (3 + 4))", operacionet "1 + 2" dhe "3 + 4" do të ekzekutohen paralelisht.
Programet në gjuhën Bend mund të ekzekutohen në pajisje që ofrojnë masiv paralelizëm, për shembull, në GPU, duke demonstruar një rritje praktike linjare në performancë në varësi të numrit të nyjeve llogaritëse. Kodi në gjuhën Bend kompozohet në një përfaqësi ndërmjetëse me nivel të ulët HVM2 (Higher-order Virtual Machine 2), e cila pastaj kompozohet në një përfaqësi në C dhe CUDA. Aktualisht, projekti mbështet vetëm ekzekutimin në GPU të NVIDIA.
Sa i pĂ«rket performancĂ«s, aplikacioni testues me realizimin e renditjes binare, kur ekzekutohet nĂ« njĂ« rrjedhĂ« tĂ« vetme CPU Apple M3 Max, u ekzekutua pĂ«r 12.15 sekonda, me 16 rrjedha pĂ«r 0.96 sekonda, dhe me GPU NVIDIA RTX 4090 me 16k rrjedha 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
