131 个版本 (31 个稳定版)
2.0.22 | 2024年8月9日 |
---|---|
2.0.21 | 2024年7月3日 |
2.0.19 | 2024年6月4日 |
1.0.20-beta | 2022年12月27日 |
0.1.23 | 2022年3月27日 |
在 编程语言 中排名 第19
每月下载量 1,187
在 13 个crate中(5 个直接) 使用
635KB
6K SLoC
高阶虚拟机 2 (HVM2)
高阶虚拟机 2 (HVM2) 是一个大规模并行的 交互组合子 解释器。
通过将高级语言(如 Python 和 Haskell)的程序编译到 HVM 中,可以直接在类似 GPU 的大规模并行硬件上运行这些语言,速度接近理想加速。
HVM2 是 HVM1 的继任者,HVM1 是 2022 年这一概念的原型。与前辈相比,HVM2 简单、快速,最重要的是更正确。 HOC 为其 论文 中列出的所有功能提供长期支持。
此存储库提供了一种低级 IR 语言,用于指定 HVM2 网络,并从该语言编译到 C 和 CUDA。它不是用于直接人类使用的。如果您正在寻找与 HVM2 交互的高级语言,请查看 Bend。
用法
免责声明:目前不支持 Windows,请暂时使用 WSL 作为解决方案。
首先安装依赖项
- 如果您想使用 C 运行时,请安装兼容 C-11 的编译器,如 GCC 或 Clang。
- 如果您想使用 CUDA 运行时,请安装 CUDA 和 nvcc(CUDA 编译器)。
- HVM 需要 CUDA 12.x,并且目前仅在 Nvidia GPU 上运行。
安装 HVM2
cargo install hvm
运行 HVM 程序有多种方式
hvm run <file.hvm> # interpret via Rust
hvm run-c <file.hvm> # interpret via C
hvm run-cu <file.hvm> # interpret via CUDA
hvm gen-c <file.hvm> # compile to standalone C
hvm gen-cu <file.hvm> # compile to standalone CUDA
所有模式产生相同的输出。编译模式需要您编译生成的文件(例如,使用 gcc 文件.c -o 文件
),但运行速度更快。CUDA 版本具有更高的峰值性能,但稳定性较差。一般来说,应使用 gen-c
进行生产。
语言
HVM 是高级语言的低级编译目标。它为连接交互网络提供了原始语法。例如
@main = a
& @sum ~ (28 (0 a))
@sum = (?(((a a) @sum__C0) b) b)
@sum__C0 = ({c a} ({$([*2] $([+1] d)) $([*2] $([+0] b))} f))
&! @sum ~ (a (b $([+] $(e f))))
&! @sum ~ (c (d e))
上面的文件实现了递归求和。如果这看起来难以阅读,请不要担心,它并不是为了让人容易阅读的。《Bend》是一种人类可读的语言,应被最终用户和希望针对 HVM 的语言使用。如果您想了解更多关于核心语法和技术的内容,请查阅 PAPER。