Bend

Bend

结合高级语言特性和大规模并行计算的编程语言

Bend是一种创新的高级并行编程语言,将高级语言的易用性与大规模并行计算的高效性相结合。它融合了Python和Haskell等语言的优秀特性,如快速对象分配、高阶函数和闭包支持,同时在GPU等并行硬件上实现了接近CUDA的性能,无需开发者手动添加并行化代码。Bend能够在GPU等大规模并行硬件上实现近乎线性的性能提升,且支持无限递归等高级特性。基于HVM2运行时开发,Bend目前仍在持续完善中,未来有望进一步优化性能。

Bend并行编程GPU编程函数式语言高性能计算Github开源项目
<h1>Bend</h1> <p>一种高级、大规模并行编程语言</p>

目录

  1. 简介
  2. 重要说明
  3. 安装
  4. 入门
  5. 加速示例
  6. 其他资源

简介

Bend提供了类似Python和Haskell等富有表现力的语言的感觉和特性。这包括快速对象分配、对带闭包的高阶函数的完全支持、无限制的递归,甚至是延续。 Bend的可扩展性类似于CUDA,它可以在GPU等大规模并行硬件上运行,几乎可以根据核心数量实现线性加速,而无需显式的并行注解:无需创建线程、锁、互斥量或原子操作。 Bend由HVM2运行时驱动。

重要说明

  • Bend旨在提高核心数量的扩展性能,支持超过10000个并发线程。
  • 当前版本的单核性能可能较低。
  • 随着我们改进代码生成和优化技术,您可以期待性能的显著提升。
  • 我们仍在努力支持Windows。可以使用WSL2作为替代解决方案。
  • 我们目前仅支持NVIDIA GPU

安装

安装依赖项

在Linux上

# 如果尚未安装Rust,请安装。 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # 对于Bend的C版本,使用GCC。我们建议使用12.x版本。 sudo apt install gcc

对于CUDA运行时,为Linux安装CUDA工具包 12.x版本。

在Mac上

# 如果尚未安装Rust,请安装。 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # 对于Bend的C版本,使用GCC。我们建议使用12.x版本。 brew install gcc

安装Bend

  1. 通过运行以下命令安装HVM2:
# HVM2是HOC的大规模并行交互组合子评估器。 cargo install hvm # 这确保HVM正确安装并可访问。 hvm --version
  1. 通过运行以下命令安装Bend:
# 此命令将安装Bend cargo install bend-lang # 这确保Bend正确安装并可访问。 bend --version

入门

运行Bend程序

bend run <file.bend> # 默认使用C解释器(并行) bend run-rs <file.bend> # 使用Rust解释器(顺序) bend run-c <file.bend> # 使用C解释器(并行) bend run-cu <file.bend> # 使用CUDA解释器(大规模并行) # 注意 # 您还可以使用gen-c和gen-cu将Bend编译为独立的C/CUDA文件以获得最佳性能。 # 代码生成器仍处于早期阶段,尚不如GCC和GHC等编译器成熟。 # 您可以使用-s标志获取更多信息,包括: # 归约次数 # 代码运行时间 # 每秒交互次数(以百万为单位)

测试Bend程序

以下示例计算从starttarget范围内所有数字的总和。可以用两种不同的方法编写:一种本质上是顺序的(因此无法并行化),另一种易于并行化。(为了便于查看,我们将在大多数示例中使用-s标志)

顺序版本:

首先,创建一个名为sequential_sum.bend的文件

# 在终端中输入此命令 touch sequential_sum.bend

然后使用文本编辑器打开sequential_sum.bend文件,复制下面的代码并粘贴到文件中。

# 定义带有两个参数的Sum函数:start和target def Sum(start, target): if start == target: # 如果start的值与target相同,则返回start。 return start else: # 如果start不等于target,递归调用Sum, # 将start增加1,并将结果加到start上。 return start + Sum(start + 1, target) def main(): # 这相当于 (1 + (2 + (3 + (...... + (999999 + 1000000))))) # 注意,这将超过Bend中数字的最大值 return Sum(1, 1_000_000)
运行文件

您可以使用Rust解释器(顺序)运行它

bend run sequential_sum.bend -s

或者您可以使用C解释器(顺序)运行它

bend run-c sequential_sum.bend -s

如果您有NVIDIA GPU,还可以在CUDA上运行(顺序)

bend run-cu sequential_sum.bend -s

在这个版本中,下一个要计算的值依赖于前一个总和,这意味着在当前计算完成之前无法继续。现在,让我们看看易于并行化的版本。

可并行化版本:

首先关闭旧文件,然后在终端中创建parallel_sum.bend

# 在终端中输入此命令 touch parallel_sum.bend

然后使用文本编辑器打开parallel_sum.bend文件,复制下面的代码并粘贴到文件中。

# 定义带有两个参数的Sum函数:start和target def Sum(start, target): if start == target: # 如果start的值与target相同,则返回start。 return start else: # 如果start不等于target,计算中点(half), # 然后递归调用Sum计算两半。 half = (start + target) / 2 left = Sum(start, half) # (Start -> Half) right = Sum(half + 1, target) return left + right # 可并行化的从1到1000000的数字总和 def main(): # 这相当于 (((1 + 2) + (3 + 4)) + ... (999999 + 1000000)...) return Sum(1, 1_000_000)

在这个例子中,(3 + 4)的和不依赖于(1 + 2),这意味着它可以并行运行,因为两个计算可以同时进行。

运行文件

你可以使用Rust解释器(顺序执行)运行它

bend run parallel_sum.bend -s

或者你可以使用C解释器(并行执行)运行它

bend run-c parallel_sum.bend -s

如果你有NVIDIA GPU,你也可以在CUDA上运行(大规模并行)

bend run-cu parallel_sum.bend -s

在Bend中,只需改变运行命令就可以实现并行化。如果你的代码能够并行运行,它就会并行运行。

加速示例

下面的代码片段实现了一个使用不可变树旋转双调排序器。这不是你期望在GPU上快速运行的那种算法。然而,由于它使用了分治法,这种方法本质上是并行的,Bend会在多个线程上执行它,无需创建线程,无需显式锁管理。

双调排序器基准测试

  • bend run:CPU,Apple M3 Max:12.15秒
  • bend run-c:CPU,Apple M3 Max:0.96秒
  • bend run-cu:GPU,NVIDIA RTX 4090:0.21秒
<details> <summary><b>点击此处查看双调排序器代码</b></summary>
# 排序网络 = 只需旋转树! 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)) # 交换远距离值(红色框) def warp(d, s, a, b): switch d: case 0: return swap(s ^ (a > b), a, b) case _: (a.a, a.b) = a (b.a, b.b) = b (A.a, A.b) = warp(d-1, s, a.a, b.a) (B.a, B.b) = warp(d-1, s, a.b, b.b) return ((A.a,B.a),(A.b,B.b)) # 向下传播 def down(d,s,t): switch d: case 0: return t case _: (t.a, t.b) = t return (rots(d-1, s, t.a), rots(d-1, s, t.b)) # 交换单个对 def swap(s, a, b): switch s: case 0: return (a,b) case _: return (b,a) # 测试 # ------- # 生成一个大树 def gen(d, x): switch d: case 0: return x case _: return (gen(d-1, x * 2 + 1), gen(d-1, x * 2)) # 对大树求和 def sum(d, t): switch d: case 0: return t case _: (t.a, t.b) = t return sum(d-1, t.a) + sum(d-1, t.b) # 对大树排序 def main: return sum(20, sort(20, 0, gen(20, 0)))
</details>

如果你对其他算法感兴趣,可以查看我们的示例文件夹

其他资源

  • 要了解Bend背后的技术,请查看HVM2论文
  • 我们正在编写官方文档,同时如需更深入的解释,请查看GUIDE.md
  • 阅读FEATURES.md了解我们的功能
  • Bend由HigherOrderCO开发 - 加入我们的Discord

编辑推荐精选

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多