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
