Projekti Bend zhvillon një gjuhë të nivelit të lartë për llogaritjet paralel në GPU

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

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster