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

Opublikowano pierwsze wersje projektu Bend, rozwijającego język programowania wysokiego poziomu do obliczeń równoległych, który jest pozycjonowany jako alternatywa dla języków niskiego poziomu, takich jak CUDA i Metal, z wyrazistą składnią i możliwościami rozwoju języków takie jak Python i Haskell. Kod projektu napisany jest w języku Rust i rozpowszechniany na licencji Apache 2.0.

Możliwości języka Bend obejmują szybką dystrybucję obiektów, możliwość stosowania funkcji wyższego rzędu, domknięcia, kontynuacje, nieograniczoną rekurencję, dopasowywanie wzorców, porównania rekurencyjne (fold) i pętle (bend), a także typy całkowite, łańcuchowe i listowe. Obsługiwane są dwie składnie: w stylu Pythona i w stylu Haskella. Programy nie wymagają określania adnotacji kontrolujących paralelizację, jawnego tworzenia wątków ani ustawiania blokad. Paralelizacja wykonywana jest automatycznie. Przykładowo, podczas obliczania wyrażenia „((1 + 2) + (3 + 4))” działania „1 + 2” i „3 + 4” zostaną wykonane równolegle.

Programy Bend mogą być uruchamiane na sprzęcie obsługującym masowy paralelizm, takim jak procesory graficzne, wykazując niemal liniowy wzrost wydajności wraz z liczbą rdzeni. Kod Bend jest kompilowany do niskopoziomowej reprezentacji pośredniej zwanej HVM2 (Higher-order Virtual Machine 2), która następnie jest kompilowana do reprezentacji w języku C i CUDA. Obecnie projekt obsługuje jedynie wykonywanie zadań na procesorach graficznych NVIDIA.

Pod względem wydajności aplikacja testowa z zaimplementowanym sortowaniem bitonicznym, wykonana w jednym wątku procesora Apple M3 Max, wykonała się w 12.15 s, przy wykorzystaniu 16 wątków – w 0.96 s, a przy wykorzystaniu procesora graficznego NVIDIA RTX 4090 z 16 tys. wątków – w 0.21 s. def sort(d, s, tree): switch d: przypadek 0: zwróć drzewo case _: (x,y) = drzewo 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: przypadek 0: zwróć drzewo case _: (x,y) = drzewo return down(d, s, warp(d-1, s, x, y)) ...

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster