4 个版本

0.2.0 2021 年 12 月 5 日
0.1.2 2021 年 11 月 24 日
0.1.1 2021 年 11 月 23 日
0.1.0 2021 年 11 月 22 日

#555 in 机器学习

Download history 2748/week @ 2024-03-14 4147/week @ 2024-03-21 1113/week @ 2024-03-28 1510/week @ 2024-04-04 1476/week @ 2024-04-11 1115/week @ 2024-04-18 1120/week @ 2024-04-25 841/week @ 2024-05-02 931/week @ 2024-05-09 1115/week @ 2024-05-16 983/week @ 2024-05-23 1112/week @ 2024-05-30 936/week @ 2024-06-06 1193/week @ 2024-06-13 1363/week @ 2024-06-20 1039/week @ 2024-06-27

4,769 每月下载量
用于 31 个 crate (7 directly)

MIT/Apache

8KB
159 代码行

Rust CUDA 项目

一个用于编写和执行极快 GPU 代码的库和工具生态系统,完全使用 Rust

指南 | 入门 | 功能

⚠️ 项目仍处于早期开发阶段,请期待可能出现错误、安全问题以及功能不完善的情况 ⚠️

目标

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

背景

历史上,通用高性能 GPU 计算一直使用 CUDA 工具包完成。CUDA 工具包主要提供了一种方式,可以与 CPU 代码结合使用 Fortran/C/C++ 代码进行 GPU 计算,并且使用单个源代码。它还提供了许多库、工具、论坛和文档,以补充单源 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__性能提升,出色的模块/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 RNGs。
  • optix用于CPU端硬件光线追踪和去噪,使用CUDA OptiX库。

还包括许多“粘合”crate,用于某些较小的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.0许可定义的、有意提交以包含在工作中的贡献,都将根据上述方式双许可,不附加任何额外的条款或条件。

依赖关系

~48KB