Projekt Bend rozwija język wysokiego poziomu do równoległych obliczeń na GPU

Opublikowano pierwsze wydania projektu Bend, rozwijającego wysokopoziomowy język programowania do obliczeń równoległych, który jest pozycjonowany jako alternatywa dla niskopoziomowych języków, takich jak CUDA i Metal, charakteryzujący się wyrazistą składnią oraz możliwościami zwiększającymi wygodę tworzenia, typowymi dla języków takich jak Python i Haskell. Kod projektu napisano w języku Rust i jest dystrybuowany na licencji Apache 2.0.

Z możliwości języka Bend wyróżnia się szybkie przydzielanie obiektów, możliwość korzystania z funkcji wyższego rzędu, zamknięć, kontynuacji, nieograniczonej rekurencji, dopasowania wzorców, rekurencyjnych dopasowań (fold) oraz pętli (bend), typów całkowitych, łańcuchowych i listowych. Wspierane są dwa warianty składni — w stylu Pythona i w stylu Haskella. W programach nie ma potrzeby określania adnotacji kontrolujących równoległość, jawnego tworzenia wątków i blokad. Równoległość dokonywana jest automatycznie, na przykład podczas obliczania wyrażenia „((1 + 2) + (3 + 4))”, operacje „1 + 2” i „3 + 4” będą wykonywane równolegle.

Programy w języku Bend mogą być uruchamiane na sprzęcie zapewniającym masową równoległość, na przykład na GPU, wykazując praktycznie liniowy wzrost wydajności w zależności od liczby rdzeni obliczeniowych. Kod w języku Bend jest kompilowany do niskopoziomowego pośredniego przedstawienia HVM2 (Higher-order Virtual Machine 2), które następnie jest kompilowane do reprezentacji w C i CUDA. Obecnie projekt wspiera jedynie wykonanie na GPU NVIDIA.

Jeśli chodzi o wydajność, to aplikacja testowa z realizacją sortowania bitonowego, przy wykonywaniu w jednym wątku CPU Apple M3 Max, została zrealizowana w 12,15 sek., z wykorzystaniem 16 wątków — w 0,96 sek., a przy użyciu GPU NVIDIA RTX 4090 z 16k wątkami — w 0,21 sek. 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)) …

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster