Proiectul Bend dezvoltă un limbaj de nivel înalt pentru calculul paralel pe GPU

Au fost publicate primele versiuni ale proiectului Bend, care dezvoltă un limbaj de programare la un nivel înalt pentru calcul paralel, fiind prezentat ca o alternativă la limbajele de nivel înalt, cum ar fi CUDA și Metal, având o sintaxă expresivă și funcționalități care îmbunătățesc confortul dezvoltării, specifice limbajelor precum Python și Haskell. Codul proiectului este scris în limbajul Rust și este distribuit sub licența Apache 2.0.

Printre funcționalitățile limbajului Bend se numără distribuția rapidă a obiectelor, posibilitatea de a folosi funcții de ordin superior, închideri, continuări, recursie nelimitată, potrivirea cu tipare, potriviri recursive (fold) și bucle (bend), precum și tipuri integer, string și listă. Se sprijină două variante de sintaxă — în stil Python și în stil Haskell. În programe nu este necesară specificarea anotărilor pentru controlul paralelismului, crearea explicită a firelor și stabilirea blocajelor. Paralelismul se realizează automat, de exemplu, în calculul expresiei „((1 + 2) + (3 + 4))”, operațiile „1 + 2” și „3 + 4” vor fi efectuate în paralel.

Programele scrise în limbajul Bend pot fi executate pe hardware care asigură paralelism masiv, cum ar fi GPU-urile, demonstrând o creștere practic liniară a performanței în funcție de numărul nucleelor de calcul. Codul în limbajul Bend este compilat într-o reprezentare intermediară de nivel inferior HVM2 (Higher-order Virtual Machine 2), care este apoi compilată în C și CUDA. În prezent, proiectul suportă doar execuția pe GPU NVIDIA.

În ceea ce privește performanța, o aplicație de testare cu implementarea sortării bitonale, rulată pe un singur fir CPU Apple M3 Max, a fost executată în 12.15 secunde, utilizând 16 fire — în 0.96 secunde, iar cu implicarea GPU NVIDIA RTX 4090 cu 16k fire — în 0.21 secunde. 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)) …

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster