2 个版本

0.1.1 2021 年 12 月 5 日
0.1.0 2021 年 11 月 22 日

#1127开发工具

Download history 44/week @ 2024-03-11 34/week @ 2024-03-18 53/week @ 2024-03-25 82/week @ 2024-04-01 43/week @ 2024-04-08 40/week @ 2024-04-15 73/week @ 2024-04-22 29/week @ 2024-04-29 31/week @ 2024-05-06 45/week @ 2024-05-13 47/week @ 2024-05-20 37/week @ 2024-05-27 31/week @ 2024-06-03 31/week @ 2024-06-10 34/week @ 2024-06-17 37/week @ 2024-06-24

每月 138 次下载
用于 4 个包 (2 个直接)

MIT/Apache 许可

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-2.0许可证定义的您有意提交供作品包含的贡献,将按上述方式双许可,不附加任何额外条款或条件。

无运行时依赖