Il progetto Bend sviluppa un linguaggio di alto livello per il calcolo parallelo su GPU

Sono stati pubblicati i primi rilasci del progetto Bend, che sviluppa un linguaggio di programmazione ad alto livello per il calcolo parallelo, posizionato come alternativa ai linguaggi a basso livello, come CUDA e Metal, con una sintassi espressiva e funzionalità che aumentano la facilità di sviluppo, caratteristiche comuni a linguaggi come Python e Haskell. Il codice del progetto è scritto in Rust e distribuito sotto licenza Apache 2.0.

Tra le caratteristiche del linguaggio Bend si segnalano la rapida distribuzione degli oggetti, la possibilità di utilizzare funzioni di ordine superiore, chiusure, continuazioni, ricorsione illimitata, pattern matching, pattern matching ricorsivo (fold) e cicli (bend), tipi numerici, stringhe e liste. Sono supportate due varianti di sintassi: in stile Python e in stile Haskell. Nei programmi non è necessario specificare annotazioni per il parallelismo, creare esplicitamente thread o impostare blocchi. Il parallelismo è gestito automaticamente, ad esempio, nel calcolo dell'espressione «((1 + 2) + (3 + 4))», le operazioni «1 + 2» e «3 + 4» verranno eseguite in parallelo.

I programmi nel linguaggio Bend possono essere eseguiti su hardware che offre parallelismo massiccio, ad esempio su GPU, mostrando praticamente una crescita lineare delle prestazioni in base al numero di core di calcolo. Il codice scritto in Bend viene compilato in una rappresentazione intermedia a basso livello HVM2 (Higher-order Virtual Machine 2), che viene poi compilata in C e CUDA. Attualmente, il progetto supporta solo l'esecuzione su GPU NVIDIA.

Per quanto riguarda le prestazioni, un'applicazione di test con implementazione dell'algoritmo di ordinamento bitonale è stata eseguita su un singolo thread della CPU Apple M3 Max in 12,15 secondi, utilizzando 16 thread in 0,96 secondi e coinvolgendo la GPU NVIDIA RTX 4090 con 16k thread in 0,21 secondi. 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)) …

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster