Rust CUDA Project
Rust CUDA 项目介绍
**Rust-GPU / **Rust-CUDA ** 公开项目
用于完全使用 Rust 编写和执行快速 GPU 代码的库和工具生态系统。
许可
发现 Apache-2.0 和 MIT 许可。
发现的许可
Apache-2.0 LICENSE-APACHE MIT LICENSE-MIT
Rust-GPU/Rust-CUDA
目录和文件
名称 | 名称 | 上次提交信息 | 上次提交日期
---|---|---|---
.cargo | .cargo
.github/workflows | .github/workflows
container | container
crates | crates
examples | examples
guide | guide
scripts | scripts
xtask | xtask
.devcontainer.json | .devcontainer.json
.gitignore | .gitignore
CODEOWNERS | CODEOWNERS
Cargo.toml | Cargo.toml
LICENSE-APACHE | LICENSE-APACHE
LICENSE-MIT | LICENSE-MIT
README.md | README.md
katex-header.html | katex-header.html
rust-toolchain.toml | rust-toolchain.toml
rustfmt.toml | rustfmt.toml
查看所有文件
最近提交
历史
Rust CUDA 项目
一个用于完全用 Rust 编写和执行极速 GPU 代码的库和工具生态系统
指南 | 快速开始 | 特性
⚠️ 该项目仍处于早期开发阶段,预计会出现错误、安全问题以及无法正常工作的情况 ⚠️
重要提示:该项目不再休眠,并且正在重启。 请贡献!
目标
Rust CUDA 项目旨在使 Rust 成为使用 CUDA Toolkit 进行极速 GPU 计算的一级语言。 它提供了将 Rust 编译为极速 PTX 代码的工具,以及使用现有 CUDA 库的库。
背景
从历史上看,通用高性能 GPU 计算一直使用 CUDA Toolkit 完成。 CUDA Toolkit 主要提供了一种使用 Fortran/C/C++ 代码进行 GPU 计算的方式,并与 CPU 代码结合使用,形成单一来源。 它还提供了许多库、工具、论坛和文档,以补充单源 CPU/GPU 代码。
CUDA 仅是 NVIDIA 独有的工具包。 已经提出了许多用于跨平台 GPU 计算的工具,例如 OpenCL、Vulkan Computing 和 HIP。 然而,CUDA 仍然是迄今为止用于此类任务的最常用工具包。 这就是为什么必须使 Rust 成为 CUDA Toolkit 可行的选择。
然而,Rust 的 CUDA 历来是一条非常坎坷的道路。 到目前为止,唯一可行的选择是使用 LLVM PTX 后端,但是,LLVM PTX 后端并不总是有效,并且会为许多常见的 Rust 操作生成无效的 PTX,并且近年来,已经一次又一次地表明,对于 GPU 上的 Rust 来说,需要一种专门的解决方案,例如 rust-gpu (对于 Rust -> SPIR-V)。
我们希望通过这个项目,我们可以推动 Rust GPU 计算行业向前发展,并使 Rust 成为此类任务的优秀语言。 Rust 提供了许多好处,例如每个内核的 __restrict__
性能优势、出色的模块/crate 系统,使用 unsafe
分隔 CPU/GPU 代码的不安全区域,低级 CUDA 库的高级包装器等。
结构
Rust CUDA 项目的范围非常广泛,它涵盖了整个 CUDA 生态系统,其中包含用于使其可用的库和工具(使用 Rust)。 因此,该项目包含许多用于 CUDA 生态系统各个方面的 crates。
当前的库阵容如下:
rustc_codegen_nvvm
:这是一个 rustc 后端,目标是用于 libnvvm 库的 NVVM IR(LLVM IR 的子集)。- 生成高度优化的 PTX 代码,该代码可以由 CUDA Driver API 加载以在 GPU 上执行。
- 在不久的将来它将仅用于 CUDA,但将来它可能会用于定位 amdgpu。
cuda_std
:用于 GPU 端的功能和实用程序,例如线程索引查询、内存分配、warp 内联函数等。- 不是一个低级库,它提供了许多实用函数,使编写更干净、更可靠的 GPU 内核更容易。
- 与
rustc_codegen_nvvm
紧密相关,后者通过内部公开 GPU 功能。
cudnn
(https://github.com/Rust-GPU/Rust-CUDA/tree/master/crates/cudnn):用于深度神经网络的 GPU 加速原语的集合。cust
:用于 CPU 端 CUDA 功能,例如启动 GPU 内核、GPU 内存分配、设备查询等。- 具有 RAII 和 Rust Results 等高级功能,使管理与 GPU 的接口更加轻松和简洁。
- CUDA Driver API 的高级包装器,CUDA Driver API 是 C++ 中使用的更常见的 CUDA Runtime API 的较低版本。
- 与 C++ Runtime API 相比,可以对内核并发性和模块加载等内容进行更精细的控制。
gpu_rand
:用于 GPU 友好的随机数生成,目前仅实现来自rand_xoshiro
的 xoroshiro RNG。optix
:用于使用 CUDA OptiX 库的 CPU 端硬件光线追踪和降噪。
除了许多用于某些较小的 CUDA 库的高级包装器等“粘合” crates 之外。
相关项目
其他与在 GPU 上使用 Rust 相关的项目:
- 2016: glassful:编译为 GLSL 的 Rust 子集。
- 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 以在着色器中使用,类似于我们的项目。
用法
## 设置你的环境,例如:
### export OPTIX_ROOT=/opt/NVIDIA-OptiX-SDK-9.0.0-linux64-x86_64
### export OPTIX_ROOT_DIR=/opt/NVIDIA-OptiX-SDK-9.0.0-linux64-x86_64
## 构建项目
cargo build
在容器环境中使用 Rust-CUDA
相关的 Dockerfile
分布位于 container
文件夹中。 以 ubuntu 24.04 为例,在存储库根目录中运行以下命令:
docker build -f ./container/ubuntu24/Dockerfile -t rust-cuda-ubuntu24 .
docker run --rm --runtime=nvidia --gpus all -it rust-cuda-ubuntu24
还包含一个示例 .devcontainer.json
文件,该文件已配置为 Ubuntu 24.02。 将其复制到 .devcontainer/devcontainer.json
以进行其他自定义。
许可
根据以下任一许可:
- Apache License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您自行决定。
贡献
除非您明确声明,否则您有意提交以包含在作品中的任何贡献,如 Apache-2.0 许可中所定义,应采用上述双重许可,没有任何其他条款或条件。
关于
用于完全使用 Rust 编写和执行快速 GPU 代码的库和工具生态系统。
主题
rust gpu cuda rust-lang gpgpu cuda-kernels gpu-programming cuda-programming
资源
许可
发现 Apache-2.0 和 MIT 许可。
发现的许可
Apache-2.0 LICENSE-APACHE MIT LICENSE-MIT