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
