新闻资讯
- 欧洲杯投注入口酿成近600类装备蓄意和研发数据集-2024欧洲杯线上买球(中国)官方网站
- 2024欧洲杯线上买球而韩国大夫却有意赶赴新加坡等外洋国度责任-2024欧洲杯线上买球(中国)官方网站
- 2024欧洲杯官网入口已累计分成1.77亿元-2024欧洲杯线上买球(中国)官方网站
- 2024欧洲杯线上买球皆调配了专科东谈主员援救-2024欧洲杯线上买球(中国)官方网站
- 欧洲杯投注入口加战船在台湾海峡淆乱搅局-2024欧洲杯线上买球(中国)官方网站
- 买球下单平台金属屋面面积达73.9万闲居米-2024欧洲杯线上买球(中国)官方网站
- 欧洲杯投注入口福建自贸/海西成见板块个股涨跌见下表:记者现场探访-2024欧洲杯线上买球(中国)官方网站
- 买球下单平台养足精神淘汰赛阶段“接着来”-2024欧洲杯线上买球(中国)官方网站
- 2024欧洲杯线上买球 在古代-2024欧洲杯线上买球(中国)官方网站
- 2024欧洲杯官网入口以致用刺激性很强的清洁剂-2024欧洲杯线上买球(中国)官方网站
- 发布日期:2024-06-27 08:51 点击次数:84
机器之心报说念
剪辑:泽南、小舟
最多可相沿 10000+ 个并发线程。
经过近 10 年的不懈艰苦,对谈论机科学中枢的潜入计议,东说念主们终于杀青了一个遐想:在 GPU 上初始高等话语。
上周末,一种名为 Bend 的编程话语在开源社区激励了强烈的打算,GitHub 的 Star 量如故稀奇了 8500。

GitHub:https://github.com/HigherOrderCO/Bend
行为一种大畛域并行的高等编程话语,它仍处于计议阶段,但提议的念念路如故让东说念主们感到相当诧异。使用 Bend,你不错为多核 CPU/GPU 编写并行代码,而无需成为具有 10 年教学的 C/CUDA 大师,嗅觉就像 Python 通常!
是的,Bend 禁受了 Python 语法。
与 CUDA、Metal 等初级替代决议不同,Bend 具有 Python、Haskell 等抒发性话语的功能,包括快速对象分派、十足闭包相沿的高阶函数、无放手的递归,致使 continuation。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 的使用历程。
最初,装配 Rust。要是你想使用 C 初始时,问候装 C 编译器(例如 GCC 或 Clang);要是要使用 CUDA 初始时,问候装 CUDA 器具包(CUDA 和 nvcc)版块 12.x。Bend 咫尺仅相沿 Nvidia GPU。
然后,装配 HVM2 和 Bend:
cargo +nightly install hvm
cargo +nightly install bend-lang
临了,编写一些 Bend 文献,并使用以下号令之一初始它:
bend run
# uses the Rust interpreter (sequential)
bend run-c
# uses the C interpreter (parallel)
bend run-cu
# 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 tree
case _:
(x,y) = tree
lft = 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 tree
case _:
(x,y) = tree
return 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 image
def 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 / 2
color = shader (i % width, i /width)
return color
# given a position, returns a color
# for this demo, it just busy loops
def demo_shader (x, y):
bend i = 0:
when i < 5000:
color = fork (i + 1)
else:
color = 0x000001
return color
# renders a 256x256 image using demo_shader
def main:
return render (16, demo_shader)
它确乎会起作用,即使触及的算法在 Bend 上也能很好地并行。长距离通讯通过全局 beta 缩减(把柄交互演算)实践,并通过 HVM2 的原子衔接器正确灵验地同步。
临了,作家暗示 Bend 咫尺只是是第一个版块,还莫得在合适的编译器上插足太多元气心灵。民众不错预期改日每个版块的原始性能齐会大幅进步。而咫尺,咱们如故不错使用评释器,从 Python 高等话语的角度一睹大畛域并行编程的阵势了。
参考内容:
https://news.ycombinator.com/item?id=40390287
https://x.com/VictorTaelin?ref_src=twsrc^google|twcamp^serp|twgr^author
https://x.com/DrJimFan/status/1791514371086250291