2 个版本
0.1.1 | 2021 年 12 月 5 日 |
---|---|
0.1.0 | 2021 年 11 月 22 日 |
#1127 在 开发工具 中
每月 138 次下载
用于 4 个包 (2 个直接)
33KB
704 行
Rust CUDA 项目
一个用于编写和执行极快 GPU 代码的库和工具生态系统,完全使用 Rust
指南 | 入门 | 功能
⚠️ 该项目仍处于早期开发阶段,请预期会有错误、安全问题以及某些功能不可用 ⚠️目标
Rust CUDA 项目旨在通过使用 CUDA 工具包,使 Rust 成为极快 GPU 计算的一级语言。它提供将 Rust 编译成极快 PTX 代码的工具,以及使用它来使用现有 CUDA 库的库。
背景
历史上,通用高性能 GPU 计算一直是使用 CUDA 工具包完成的。CUDA 工具包主要提供一种使用 Fortran/C/C++ 代码与 CPU 代码结合使用的方法,实现单一源代码。它还提供许多库、工具、论坛和文档,以补充单一源代码的 CPU/GPU 代码。
CUDA 是 NVIDIA 独有的工具包。已经提出了许多用于跨平台 GPU 计算的工具,如 OpenCL、Vulkan Computing 和 HIP。然而,CUDA 仍然是此类任务中使用的最广泛的工具包。这就是为什么让 Rust 成为 CUDA 工具包的可行选项至关重要。
然而,CUDA 与 Rust 的结合一直是历史上一条非常坎坷的道路。直到现在,唯一的可行选项是使用 LLVM PTX 后端,然而,LLVM PTX 后端并不总是有效,会为许多常见的 Rust 操作生成无效的 PTX,而在最近几年,随着 rust-gpu (Rust -> SPIR-V) 等项目的出现,已经一次又一次地表明需要一个针对 GPU 上的 Rust 的专用解决方案。
我们的目标是,通过这个项目,推动Rust GPU计算行业的发展,使Rust成为此类任务的优秀语言。Rust提供了许多好处,例如每个内核的性能优势__restrict__
,出色的模块/包系统,使用unsafe
限定CPU/GPU代码的不安全区域,高级包装器用于底层CUDA库等。
结构
Rust CUDA项目的范围非常广泛,涵盖了CUDA生态系统的全部,包含使用Rust使用的库和工具。因此,该项目包含许多用于CUDA生态系统各个方面的包。
当前库的列表如下
rustc_codegen_nvvm
,这是一个rustc后端,针对NVVM IR(LLVM IR的一个子集)的libnvvm
库。- 生成高度优化的PTX代码,可以由CUDA驱动程序API加载并在GPU上执行。
- 在未来,它将仅限于CUDA,但将来可能会用于针对amdgpu。
cuda_std
用于GPU端函数和实用程序,例如线程索引查询、内存分配、warp内联函数等。- 不是一个底层库,提供了许多实用函数,以便更容易编写更干净、更可靠的GPU内核。
- 与
rustc_codegen_nvvm
紧密相关,通过它内部暴露GPU功能。
cust
用于CPU端CUDA功能,例如启动GPU内核、GPU内存分配、设备查询等。- 高级,具有RAII和Rust Results等特性,使管理GPU接口更容易、更干净。
- 是CUDA驱动程序API的高级包装器,是C++中使用的更常见的CUDA运行时API的较低级别版本。
- 比C++运行时API提供了对内核并发和模块加载等事物的更多细粒度控制。
gpu_rand
用于GPU友好的随机数生成,目前仅实现了来自rand_xoshiro
的xoroshiro RNGs。optix
用于CPU端硬件光线追踪和去噪,使用CUDA OptiX库。
此外,还包括许多用于某些较小CUDA库的高级包装器等“粘合”包。
相关项目
其他与在GPU上使用Rust相关的项目
- 2016年:glassful Rust的一个子集,可以编译为GLSL。
- 2017年:inspirv-rust实验性的Rust MIR -> SPIR-V编译器。
- 2018年:nvptx使用rustc的
nvptx
目标(使用LLVM PTX后端)的Rust到PTX编译器。 - 2020年:accel依赖于与
nvptx
相同的机制的更高级库。 - 2020年:rlsl实验性的Rust -> SPIR-V编译器(rust-gpu的前身)。
- 2020年:rust-gpu Rustc代码生成后端,将Rust编译为SPIR-V用于着色器,与我们的项目类似。
许可证
根据您的意愿,许可如下
- Apache License,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交供作品包含的贡献,将按上述方式双许可,不附加任何额外条款或条件。