Byly zveřejněny první verze projektu Bend, který vyvíjí vysoce úrovňový programovací jazyk pro paralelní výpočty. Ten se prezentuje jako alternativa k nízkoúrovňovým jazykům, jako jsou CUDA a Metal, a nabízí expresivní syntaxi a možnosti zvyšující pohodlí vývoje, typické pro jazyky jako Python a Haskell. Kód projektu je napsán v jazyce Rust a distribuuje se pod licencí Apache 2.0.
Mezi možnosti jazyka Bend patří rychlé rozdělení objektů, použití funkcí vyššího řádu, uzávěrů, pokračování, neomezené rekurze, vzorové shody, rekurzivní shody (fold) a cykly (bend), celá čísla, řetězce a seznamové typy. Podporují se dva varianty syntaxe — ve stylu Python a ve stylu Haskell. V programech není vyžadováno uvádění řídících anotací pro paralelizaci, explicitní vytváření vláken a nastavování zámků. Paralelizace se provádí automaticky, například při výpočtu výrazu „((1 + 2) + (3 + 4))“ budou operace „1 + 2“ a „3 + 4“ provedeny paralelně.
Programy napsané v jazyce Bend mohou běžet na hardwaru, který poskytuje masový paralelismus, například na GPU, přičemž vykazují prakticky lineární nárůst výkonu v závislosti na počtu výpočetních jader. Kód v jazyce Bend je kompilován do nízkoúrovňového mezilehlého kódu HVM2 (Higher-order Virtual Machine 2), který je pak kompilován do podoby pro C a CUDA. V současné době projekt podporuje pouze běh na GPU NVIDIA.
Pokud jde o výkon, testovací aplikace s implementací bitonní třídění byla na jednom vlákně CPU Apple M3 Max provedena za 12,15 sekundy, při využití 16 vláken za 0,96 sekundy a při zapojení GPU NVIDIA RTX 4090 se 16k vlákny za 0,21 sekundy.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)) …
Zdroj: opennet.ru
