新闻中心

首个GPU高级语言,大规模并行就像写Python,已获8500 Star

2024-05-24
浏览次数:
返回列表

经过近10年的不懈努力,对计算机科学核心的深入研究,人们终于实现了一个梦想:在gpu上运行高级语言。

上周末,一种名为 Bend 的编程语言在开源社区引发了热烈的讨论,GitHub 的 Star 量已经超过了 8500。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

首个GPU高级语言,大规模并行就像写Python,已获8500 Star

GitHub:https://github.com/HigherOrderCO/Bend

作为一种大规模并行的高级编程语言,它仍处于研究阶段,但提出的思路已经让人们感到非常惊讶。使用 Bend,你可以为多核 CPU/GPU 编写并行代码,而无需成为具有10年经验的 C/CUDA 专家,感觉就像 Python 一样!

首个GPU高级语言,大规模并行就像写Python,已获8500 Star

是的,Bend 采用了 Python 语法。

Bend是一种支持Python、Haskell等表达性语言的编程范式,它不同于CUDA、Metal等低级替代方案。Bend具备快速对象分配、完全闭包支持的高阶函数、无限制的递归、以及基于核心数量的近线性加速。Bend在大规模并行硬件上运行,并提供基于HVM2的运行时支持。

该项目的主要贡献者 Victor Taelin 来自巴西,他在 X 平台上分享了 Bend 的主要特性和开发思路。

首先,Bend 不适用于现代机器学习算法,因为这些算法是高度正则化的(矩阵乘法)且具有预先分配的内存,并且通常已经编写了好的 CUDA 内核。

Bend 的巨大优势体现在实际应用中,这是因为「真正的应用程序」通常没有预算来制作专用的 GPU 内核。试问,谁在 CUDA 中制作了网站?而且,即使有人这样做了,也是不可行的,因为:

1. 真正的应用程序需要从许多不同的库导入函数,无法为它们编写 CUDA 内核;

2. 真实的应用程序具有动态函数和闭包;

3. 真实的应用程序会动态且不可预测地分配大量内存。

Bend 完成了一些新的尝试,并且在某些情况下可以相当快,但现在想写大语言模型肯定是不行的。

作者对比了一下旧方法和新的方法,使用相同的算法树中的双调排序,涉及 JSON 分配和操作。Node.js 的速度是 3.5 秒(Apple M3 Max),Bend 的速度是 0.5 秒(NVIDIA RTX 4090)。

是的,目前 Bend 需要整块 GPU 才能在一个核心上击败 Node.js。但另一方面,这还是一个初生的新方法与大公司(Google)优化了 16 年的 JIT 编译器在进行比较。未来还有很多可能性。

如何使用

在 GitHub 上,作者简要介绍了 Bend 的使用流程。

易标AI 易标AI

告别低效手工,迎接AI标书新时代!3分钟智能生成,行业唯一具备查重功能,自动避雷废标项

易标AI 135 查看详情 易标AI

首先,安装 Rust。如果你想使用 C 运行时,请安装 C 编译器(例如 GCC 或 Clang);如果要使用 CUDA 运行时,请安装 CUDA 工具包(CUDA 和 nvcc)版本 12.x。Bend 目前仅支持 Nvidia GPU。

然后,安装 HVM2 和 Bend:

cargo +nightly install hvmcargo +nightly install bend-lang

最后,编写一些 Bend 文件,并使用以下命令之一运行它:

bend run<file.bend> # uses the Rust interpreter (sequential)bend run-c<file.bend> # uses the C interpreter (parallel)bend run-cu <file.bend> # uses the CUDA interpreter (massively parallel)

你还可以使用 gen-c 和 gen-cu 将 Bend 编译为独立的 C/CUDA 文件,以获得最佳性能。但 gen-c、gen-cu 仍处于起步阶段,远没有像 GCC 和 GHC 这样的 SOTA 编译器那么成熟。

Bend 中的并行编程

这里举例说明可以在 Bend 中并行运行的程序。例如,表达式:

(((1 + 2) + 3) + 4)

不能并行运行,因为 + 4 取决于 + 3,而 + 3 又取决于 (1+2)。而表达式:

((1 + 2) + (3 + 4))

可以并行运行,因为 (1+2) 和 (3+4) 是独立的。Bend 并行运行的条件就是符合并行逻辑。

再来看一个更完整的代码示例:

# Sorting Network = just rotate trees!def sort (d, s, tree):switch d:case 0:return treecase _:(x,y) = treelft = sort (d-1, 0, x)rgt = sort (d-1, 1, y)return rots (d, s, lft, rgt)# Rotates sub-trees (Blue/Green Box)def rots (d, s, tree):switch d:case 0:return treecase _:(x,y) = treereturn down (d, s, warp (d-1, s, x, y))(...)

该文件实现了具有不可变树旋转的双调排序器。它不是很多人期望的在 GPU 上快速运行的算法。然而,由于它使用本质上并行的分治方法,因此 Bend 会以多线程方式运行它。一些速度基准:

  •  CPU,Apple M3 Max,1 个线程:12.15 秒
  •  CPU,Apple M3 Max,16 线程:0.96 秒
  •  GPU,NVIDIA RTX 4090,16k 线程:0.21 秒

不执行任何操作即可实现 57 倍的加速。没有线程产生,没有锁、互斥锁的显式管理。我们只是要求 Bend 在 RTX 上运行我们的程序,就这么简单。

Bend 不限于特定范例,例如张量或矩阵。任何的并发系统,从着色器到类 Erlang 的 actor 模型都可以在 Bend 上进行模拟。例如,要实时渲染图像,我们可以简单地在每个帧上分配一个不可变的树:

# given a shader, returns a square imagedef render (depth, shader):bend d = 0, i = 0:when d < depth:color = (fork (d+1, i*2+0), fork (d+1, i*2+1))else:width = depth / 2color = shader (i % width, i /width)return color# given a position, returns a color# for this demo, it just busy loopsdef demo_shader (x, y):bend i = 0:when i < 5000:color = fork (i + 1)else:color = 0x000001return color# renders a 256x256 image using demo_shaderdef main:return render (16, demo_shader)

它确实会起作用,即使涉及的算法在 Bend 上也能很好地并行。长距离通信通过全局 beta 缩减(根据交互演算)执行,并通过 HVM2 的原子链接器正确有效地同步。

最后,作者表示 Bend 现在仅仅是第一个版本,还没有在合适的编译器上投入太多精力。大家可以预期未来每个版本的原始性能都会大幅提高。而现在,我们已经可以使用解释器,从 Python 高级语言的角度一睹大规模并行编程的样子了。


以上就是首个GPU高级语言,大规模并行就像写Python,已获8500 Star的详细内容,更多请关注其它相关文章!


# 训练  # 荆门高效网站推广多少钱  # 搜索关键词的排名软件  # 嘉兴无锡关键词排名  # 曲阜市场营销推广招聘  # 查询建设标准的网站  # 结构化  # 可以使用  # 多核  # 多线程  # 开源  # 应用程序  # 已获  # 首个  # 递归  # 就像  # warp  # git  # python  # 模型  # 咸阳页面seo优化  # 建设新闻发布网站的意义  # 南昌新建seo优化排名  # 张店营销推广  # seo优化 外包 


相关栏目: 【 行业资讯67740 】 【 技术百科0 】 【 网络运营39195


相关推荐: 市盈率回落是什么意思  j*a 怎么清空数组元素  苹果手机16新款颜色有哪些  typescript学多久可以学会  苹果16更新了哪些版本  春运什么时候开始抢票  按键精灵datediff函数怎么用 如何使用按键精灵中的Datediff函数教程  win10windows资源管理器在哪里打开  如何发挥固态硬盘性能  win7怎么关闭360壁纸屏保  夸克网盘为什么解析错误  sql isnull函数如何使用  树莓派命令行如何新建文件  三星固态硬盘如何保修  苹果16系统有哪些缺陷  如何正确使用固态硬盘  新找到ao3镜像网站链接入口  市盈率是负数是什么意思  js怎么设置typescript  三菱变频器POWER是什么意思  iphone拍电子屏有横条如何解决  j*a数组怎么保存类  165开头的是什么电话号码  今天是农历多少号  夸克学习都有什么课程  苹果16多有哪些功能  硬件如何执行命令  阿里云盘的会员怎么用  360f4怎么取消百变壁纸  光猫power和pon常亮是什么意思  8k是多少钱  阿里云盘扩容工具怎么用  如何提高固态硬盘性能  如何查看bash内置的命令  命令行如何启动应用程序  怎么打印数组j*a  云笔记本电脑有什么用  typescript多久能学会  单片机怎么定义字符长度  个人征信不好如何恢复 个人征信不良的全面修复指南  j*a数组怎么取元素  win10如何开启命令行  hen是什么意思  联想手机如何输入命令行  typescript性能如何  阿里云盘共享账户怎么用  单身交友必备软件  本科一批和本科二批是什么意思  单片机显存怎么设置最佳  交管12123协议头不完整是啥意思 

搜索