rust-cuda:让 Rust 成为 CUDA 高性能 GPU 计算的一流语言

Ecosystem of libraries and tools for writing and executing fast GPU code fully in Rust.

Branch4Tags2
FilesLast commitLast update
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
1 year ago
4 years ago
4 years ago
4 years ago

Rust CUDA 项目

一个用于编写和执行极快 GPU 代码的生态系统,完全在 Rust 语言中实现

指南 | 入门 | 特性

⚠️ 该项目仍处于早期开发阶段,可能会遇到错误、安全问题以及不工作的情况 ⚠️

Important

这个项目已经不再沉寂,并且正在重启。 请贡献力量!

目标

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

背景

在历史上,通用高性能 GPU 计算主要使用 CUDA Toolkit 进行。CUDA Toolkit 主要提供了一种使用 Fortran/C/C++ 代码进行 GPU 计算的方法,与 CPU 代码配合使用单一源代码。它还提供了许多库、工具、论坛和文档来补充单一源 CPU/GPU 代码。

CUDA 是专属于 NVIDIA 的工具包。已经提出了许多跨平台 GPU 计算的工具,例如 OpenCL、Vulkan Computing 和 HIP。然而,CUDA 仍然是最常用的工具包,因此迫切需要使 Rust 成为 CUDA Toolkit 的可行选项。

但是,Rust 与 CUDA 一起使用在历史上一直是一条非常坎坷的道路。直到现在,唯一可行的选择是使用 LLVM PTX 后端,但是,LLVM PTX 后端并不总是有效,并且会为许多常见的 Rust 操作生成无效的 PTX 代码,近年来,随着诸如 rust-gpu(用于 Rust -> SPIR-V)等项目的发展,已经一次又一次地证明,Rust 在 GPU 上需要一个专门的解决方案。

我们的希望是,通过这个项目,我们可以推动 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 功能。
  • cudnn 提供了用于深度神经网络的 GPU 加速原语集合。
  • cust 用于 CPU 边的 CUDA 功能,例如启动 GPU 内核、GPU 内存分配、设备查询等。
    • 高级封装,具有 RAII 和 Rust Results 等特性,简化了 GPU 接口的管理。
    • CUDA 驱动 API 的高级封装,是 C++ 中更常见的 CUDA 运行时 API 的较低级别版本。
    • 比较 CUDA 运行时 API 提供了更细粒度的控制,例如内核并发和模块加载。
  • gpu_rand 用于 GPU 友好的随机数生成,目前仅实现了 rand_xoshiro 的 xoroshiro 随机数生成器。
  • optix 用于 CPU 边的硬件光线追踪和去噪,使用 CUDA OptiX 库。

除了许多用于特定较小的 CUDA 库的“粘合”包。

相关项目

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

  • 2016: glassful Rust 的子集,编译为 GLSL。
  • 2017: inspirv-rust 实验性的 Rust MIR -> SPIR-V 编译器。
  • 2018: nvptx 使用 nvptx 目标为 rustc 的 Rust 到 PTX 编译器(使用 LLVM PTX 后端)。
  • 2020: accel 依赖于 nvptx 机制的更高层次库。
  • 2020: rlsl 实验性的 Rust -> SPIR-V 编译器(rust-gpu 的前身)。
  • 2020: rust-gpu rustc 编译器后端,将 Rust 编译为 SPIR-V 以在着色器中使用,与我们的项目有相似的机制。

许可

根据您的意愿,本项目遵循以下任一许可:

贡献

除非您明确声明,否则您有意提交的任何贡献,按照 Apache-2.0 许可中的定义,应被视为以上双重许可,不附加任何额外的条款或条件。

Introduction

生态系统,包含用于编写和执行高效GPU代码的库与工具,完全以Rust语言实现。【此简介由AI生成】

Customize your domain
595.36 K245Visit GitHub