Die ersten Ausgaben des Projekts Bend wurden veröffentlicht, das eine hochrangige Programmiersprache fĂŒr parallele Berechnungen entwickelt. Diese wird als Alternative zu Niedrigsprachen wie CUDA und Metal positioniert, und bietet einen ausdrucksstarken Syntax sowie Entwicklungsvereinfachungen, wie sie in Sprachen wie Python und Haskell zu finden sind. Der Code des Projekts ist in Rust geschrieben und steht unter der Lizenz Apache 2.0.
Zu den Möglichkeiten der Sprache Bend gehört die schnelle Verteilung von Objekten, die Verwendung von höheren Funktionen, Closures, Continuations, unbeschrĂ€nkter Rekursion, Mustervergleich, rekursive Vergleiche (fold) und Schleifen (bend), verschiedene Ganzzahl-, String- und Listentypen. Zwei Syntax-Varianten werden unterstĂŒtzt â im Python-Stil und im Haskell-Stil. In Programmen ist keine Angabe von Parallelisierungs-Annotations, das explizite Erstellen von Threads oder das Einrichten von Sperren erforderlich. Die Parallelisierung erfolgt automatisch, zum Beispiel bei der Berechnung des Ausdrucks â((1 + 2) + (3 + 4))â, wobei die Operationen â1 + 2â und â3 + 4â parallel ausgefĂŒhrt werden.
Programme in der Sprache Bend können auf Hardware ausgefĂŒhrt werden, die MassenausfĂŒhrungen unterstĂŒtzt, wie z. B. auf GPUs, und zeigen einen praktisch linearen Anstieg der Leistung in AbhĂ€ngigkeit von der Anzahl der Rechenkerne. Der Code in der Sprache Bend wird in eine niedrigstufige ZwischenreprĂ€sentation HVM2 (Higher-order Virtual Machine 2) kompiliert, die dann in C- und CUDA-ReprĂ€sentationen kompiliert wird. Derzeit wird die AusfĂŒhrung nur auf NVIDIA-GPUs unterstĂŒtzt.
Was die Leistung betrifft, so wurde eine Testanwendung mit der Implementierung der Biton-Sortierung bei AusfĂŒhrung in einem einzigen CPU-Thread des Apple M3 Max in 12,15 Sekunden ausgefĂŒhrt, bei Einsatz von 16 Threads in 0,96 Sekunden und bei Nutzung der NVIDIA RTX 4090 mit 16k Threads in 0,21 Sekunden. 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)) âŠ
Quelle: opennet.ru
