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
