1个不稳定版本

0.1.1 2022年2月12日
0.1.0 2022年2月7日

#28 in #cpu-gpu

Download history 2715/week @ 2024-03-13 4037/week @ 2024-03-20 1362/week @ 2024-03-27 1589/week @ 2024-04-03 1181/week @ 2024-04-10 1253/week @ 2024-04-17 1075/week @ 2024-04-24 846/week @ 2024-05-01 757/week @ 2024-05-08 762/week @ 2024-05-15 616/week @ 2024-05-22 762/week @ 2024-05-29 767/week @ 2024-06-05 697/week @ 2024-06-12 719/week @ 2024-06-19 871/week @ 2024-06-26

3,246 每月下载量
29 个crate中使用 (11个直接使用)

MIT/Apache

9KB
124

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)这样的项目出现,已经一次又一次地表明需要一个针对Rust在GPU上的专用解决方案。

我们的希望是,通过这个项目,我们可以推动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。

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

依赖关系

~5.5MB
~147K SLoC