2个版本

0.11.3 2021年12月5日
0.11.2 2021年11月22日

#656 in 硬件支持

Download history 2501/week @ 2024-03-13 3788/week @ 2024-03-20 1044/week @ 2024-03-27 1252/week @ 2024-04-03 935/week @ 2024-04-10 914/week @ 2024-04-17 872/week @ 2024-04-24 561/week @ 2024-05-01 665/week @ 2024-05-08 651/week @ 2024-05-15 551/week @ 2024-05-22 614/week @ 2024-05-29 659/week @ 2024-06-05 547/week @ 2024-06-12 562/week @ 2024-06-19 695/week @ 2024-06-26

2,629 每月下载量
用于 26 个crate(2个直接使用)

MIT/Apache

280KB
9K SLoC

Rust CUDA项目

一个用于在Rust中编写和执行极快GPU代码的库和工具生态系统

指南 | 入门 | 功能

⚠️ 项目仍处于早期开发阶段,请预期可能出现错误、安全问题和无法正常工作的情况 ⚠️

目标

Rust CUDA项目是一个旨在使Rust成为使用CUDA工具包进行极快GPU计算的一级语言的项目的项目。它提供将Rust编译成极快的PTX代码的工具,以及用于使用它与现有CUDA库一起使用的库。

背景

历史上,通用高性能GPU计算一直是使用CUDA工具包完成的。CUDA工具包主要提供了一种使用Fortran/C/C++代码与CPU代码结合使用的方法,以单个源代码形式。它还提供了许多库、工具、论坛和文档,以补充单个源代码的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__ 性能优势,出色的模块/crate 系统,使用 unsafe 标记 CPU/GPU 代码中的不安全区域,高级封装到低级 CUDA 库等。

结构

Rust CUDA 项目的范围相当广泛,涵盖了 CUDA 生态系统的全部内容,提供了使用 Rust 可以使用的库和工具。因此,该项目包含了许多针对 CUDA 生态系统各个方面的 crate。

当前的库列表如下

  • 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 库的高级封装的“粘合”crate。

其他与在 GPU 上使用 Rust 相关的项目

  • 2016: glassful Rust 的子集,编译为 GLSL。
  • 2017: inspirv-rust 实验性的 Rust MIR -> SPIR-V 编译器。
  • 2018: nvptx 使用 rustc 的 nvptx 目标(使用 LLVM PTX 后端)的 Rust 到 PTX 编译器。
  • 2020: accelnvptx 相同机制的更高级库。
  • 2020: rlsl 实验性的 Rust -> SPIR-V 编译器(rust-gpu 的前身)。
  • 2020: rust-gpu Rustc 代码生成后端,将 Rust 编译为 SPIR-V 以用于着色器,与我们的项目具有相似的机制。

许可证

许可为以下任一项

由您自行决定。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您提交的任何有意提交给作品以供包括在内的贡献,都将按上述方式双重许可,没有任何附加条款或条件。

没有运行时依赖