Проект Bend развивает высокоуровневый язык для параллельных вычислений на GPU

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3249
Зарегистрирован: 20.08.2022

#

Проект Bend развивает высокоуровневый язык для параллельных вычислений на GPU
Дата публикации:Tue, 21 May 2024 13:18:36 +0300




Опубликованы первые выпуски проекта Bend, развивающего высокоуровневый язык программирования для параллельных вычислений, который позиционируется как альтернатива низкоуровневыми языкам, таким как CUDA и Metal, обладающая выразительным синтаксисом и возможностями для повышения удобства разработки, свойственными таким языкам, как Python и Haskell. Код проекта написан на языке Rust и распространяется под лицензией Apache 2.0.






Из возможностей языка Bend отмечается быстрое распределение объектов, возможность использования функций высшего порядка, замыканий, продолжений, неограниченной рекурсии, сопоставления с образцом, рекурсивных сопоставлений (fold) и циклов (bend), целочисленных, строковых и списочных типов. Поддерживается два варианта синтаксиса - в стиле Python и в стиле
Haskell. В программах не требуется указание управляющих распаралелливанием аннотаций, явного создания потоков и выставления блокировок. Распараллеливание производится автоматически, например, при вычислении выражения "((1 + 2) + (3 + 4))", операции "1 + 2" и "3 + 4" будут выполнены параллельно.



Программы на языке Bend могут выполняться на оборудовании, обеспечивающем массовый пареллелизм, например, на GPU, демонстрируя практически линейный рост производительности в зависимости от числа вычислительных ядер. Код на языке Bend компилируется в низкоуровневое промежуточное представление HVM2 (Higher-order Virtual Machine 2), которое затем компилируется в представление на C и CUDA. В настоящее время проектом поддерживается только выполнение на GPU NVIDIA.






Что касается производительности, то тестовое приложение с реализацией битонной сортировки, при выполнении в одном потоке CPU Apple M3 Max было выполнено за 12.15 сек., при задействовании 16 потоков - за 0.96 сек., а при привлечении GPU NVIDIA RTX 4090 с 16k потоками - за 0.21 сек.


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))
...






Изображение




Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=61224

Жизнь за Нер'зула!

Ответить