4 个版本

0.2.2 2022年2月7日
0.2.1 2021年12月8日
0.2.0 2021年12月5日
0.1.0 2021年11月22日

#736算法

Download history 292/week @ 2024-03-13 337/week @ 2024-03-20 432/week @ 2024-03-27 480/week @ 2024-04-03 354/week @ 2024-04-10 435/week @ 2024-04-17 336/week @ 2024-04-24 348/week @ 2024-05-01 168/week @ 2024-05-08 207/week @ 2024-05-15 143/week @ 2024-05-22 211/week @ 2024-05-29 193/week @ 2024-06-05 210/week @ 2024-06-12 204/week @ 2024-06-19 213/week @ 2024-06-26

853 每月下载量
用于 6 个 crate(3 个直接使用)

MIT/Apache

320KB
7.5K SLoC

Rust CUDA 项目

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

指南 | 入门 | 功能

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

目标

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

背景

历史上,通用高性能 GPU 计算一直是使用 CUDA 工具包完成的。CUDA 工具包主要提供了一种方法,可以通过单个源代码使用 Fortran/C/C++ 代码在 GPU 上进行计算,并与 CPU 代码结合使用。它还提供了许多库、工具、论坛和文档,以补充单源 CPU/GPU 代码。

CUDA 是一个仅限于 NVIDIA 的工具包。已经提出了许多跨平台 GPU 计算工具,如 OpenCL、Vulkan 计算和 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库。

还包括许多用于诸如某些较小CUDA库的高级封装的“胶水”crate。

其他与在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许可证定义的,您有意提交以包含在作品中的任何贡献,应双许可如上所述,没有任何额外条款或条件。

依赖项

约3MB
~63K SLoC