3个不稳定版本
0.2.0 | 2022年2月12日 |
---|---|
0.1.1 | 2022年2月7日 |
0.1.0 | 2021年11月22日 |
42在#executing中排名
3,364次每月下载
用于32个crate(直接使用3个)
6KB
107 行
Rust CUDA项目
一个用于使用CUDA工具包在Rust中编写和执行极快GPU代码的库和工具生态系统。
指南 | 入门 | 特性
⚠️ 项目仍处于早期开发阶段,请预期可能出现错误、安全问题以及不正常工作的情况 ⚠️目标
Rust CUDA项目旨在通过使用CUDA工具包,将Rust打造成为极快GPU计算的顶级语言。它提供了将Rust编译为极快PTX代码的工具,以及使用它来使用现有CUDA库的库。
背景
历史上,通用高性能GPU计算一直是使用CUDA工具包进行的。CUDA工具包主要提供了一种方式,通过单源代码使用Fortran/C/C++代码与CPU代码协同进行GPU计算。它还提供许多库、工具、论坛和文档,以补充单源CPU/GPU代码。
CUDA是仅适用于NVIDIA的工具包。许多工具已被提出用于跨平台GPU计算,如OpenCL、Vulkan Computing和HIP。然而,CUDA仍然是此类任务中使用最广泛的工具包。这就是为什么使Rust成为CUDA工具包的可行选择至关重要。
然而,使用Rust的CUDA一直是一条非常坎坷的道路。直到现在,唯一可行的选择是使用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
,这是一个针对 NVVM IR(LLVM IR 的子集)的 rustc 后端,用于 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 RNG。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 许可证第 2 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确表示否则,根据Apache-2.0许可证定义,您有意提交用于工作内容的任何贡献都将双授权,如上所述,无需任何附加条款或条件。
依赖关系
~1.5MB
~36K SLoC