Об этом проекте
Bend — это высокоуровневый язык программирования, предназначенный для массового параллелизма, разработанный HigherOrderCO и работающий на среде выполнения HVM2. Он стремится сочетать выразительность таких языков, как Python и Haskell, с масштабируемостью вычислений на GPU в стиле CUDA.
Среди особенностей языка, выделенных в README, — быстрое выделение объектов, полная поддержка функций высшего порядка с замыканиями, неограниченная рекурсия и продолжения. Параллелизм является неявным: в README указано, что нет необходимости в создании потоков, блокировках, мьютексах или атомарных операциях. Код, который может выполняться параллельно, будет выполняться параллельно, с почти линейным ускорением в зависимости от числа ядер; проект заявляет поддержку более 10000 одновременных потоков.
Установка выполняется через cargo из Rust. Пользователи устанавливают среду выполнения HVM2 командой `cargo install hvm`, затем язык — командой `cargo install bend-lang`. В инструкциях рассматриваются Linux и macOS, для Windows предлагается WSL2. Для CUDA-рантайма требуется NVIDIA CUDA Toolkit 12.x, и в README отмечается, что в настоящее время поддерживаются только GPU NVIDIA.
Программы можно запускать через несколько бэкендов: `bend run-rs` использует последовательный интерпретатор на Rust, `bend run-c` — параллельный интерпретатор на C, а `bend run-cu` — массово-параллельный интерпретатор на CUDA. Код Bend также можно компилировать в автономные C или CUDA файлы с помощью `gen-c` и `gen-cu`, хотя в README генератор кода описан как ранняя стадия. Флаг `-s` выводит информацию о редукциях, времени выполнения и взаимодействиях в секунду.
В README рассматривается пример последовательного и параллельного суммирования, чтобы проиллюстрировать, как формулировка «разделяй и властвуй» обеспечивает автоматическое параллельное выполнение. Также представлен бенчмарк битонической сортировки с указанными временными показателями: 12,15 секунды на Apple M3 Max CPU через интерпретатор Rust, 0,96 секунды на том же CPU через интерпретатор C и 0,21 секунды на NVIDIA RTX 4090 GPU через интерпретатор CUDA. Эти цифры — собственные замеры проекта.
В README предупреждается, что текущая версия может иметь более низкую производительность на одном ядре, и что производительность должна улучшаться по мере развития методов генерации кода и оптимизации. Дополнительные ресурсы включают статью о HVM2, GUIDE.md, FEATURES.md, папку с примерами и Discord-сообщество.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.