Het Bend-project ontwikkelt een high-level taal voor parallelle berekeningen op GPU's.

De eerste uitgaven van het Bend-project zijn gepubliceerd, dat een hoog-niveau programmeertaal voor parallelle berekeningen ontwikkelt, die wordt gepositioneerd als een alternatief voor laag-niveau talen zoals CUDA en Metal, met een expressieve syntaxis en mogelijkheden voor verbeterd ontwikkelgemak, vergelijkbaar met talen zoals Python en Haskell. De code van het project is geschreven in Rust en wordt verspreid onder de Apache 2.0-licentie.

De mogelijkheden van de Bend-taal omvatten snelle objectdistributie, het gebruik van hogere-orde functies, closures, continuaties, ongegrensde recursie, patroonmatching, recursieve matches (fold) en loops (bend), evenals gehele, string- en lijsttypen. Twee syntaxisvarianten worden ondersteund - in Python-stijl en in Haskell-stijl. Programma's vereisen geen aanduidingen voor parallelle besturing, expliciete thread-creatie of het instellen van locks. Parallelisatie gebeurt automatisch, bijvoorbeeld bij het berekenen van de expressie "((1 + 2) + (3 + 4))", worden de operaties "1 + 2" en "3 + 4" parallel uitgevoerd.

Programma's geschreven in Bend kunnen worden uitgevoerd op hardware die massale parallelisme ondersteunt, zoals GPU's, en tonen een vrijwel lineaire prestatiegroei afhankelijk van het aantal verwerkingskernen. Code in Bend wordt gecompileerd naar een laag-niveau tussenrepresentatie genaamd HVM2 (Higher-order Virtual Machine 2), die vervolgens wordt gecompileerd naar C en CUDA. Momenteel ondersteunt het project alleen uitvoering op NVIDIA GPU's.

Wat de prestaties betreft, de testapplicatie met een implementatie van bitonale sortering, uitgevoerd op een enkele thread van de Apple M3 Max CPU, werd voltooid in 12,15 seconden, terwijl het gebruik van 16 threads resulteerde in 0,96 seconden, en met de NVIDIA RTX 4090 GPU met 16k threads in 0,21 seconden. 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)) …

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster