NVIDIA宣布正在开发CUDA Rust工具包,该工具包使Rust语言能够开发在GPU上运行的内核。该工具包在编译时确保内存安全,并防止出现竞争条件。明年,CUDA Rust计划发展到与CUDA C++和CUDA Python工具包类似的水平,以适用于生产项目。
CUDA Rust 工具链支持两种并行内核开发模型:SIMT(单指令多线程)和 Tile。SIMT 模型允许对单个线程进行底层定义,并启动和管理数千个这样的线程。Tile 模型提供更高层次的抽象,它无需显式管理单个线程,而是定义用于操作数据块(Tile)的算法,Tile IR 编译器负责处理所有线程操作、访问同步、内存管理以及跨张量核心的数据分发。
为了使用 SIMT 模型进行 Rust 语言开发,正在开发 cuda-oxide 编译器,它允许使用标准类型系统和 Rust 所有权模型,将 Rust 代码直接编译成可在 .NET 中执行的指令。 虚拟机 CUDA PTX(并行线程执行)。GPU 内核是用普通的 Rust 编写的,但在 no_std 环境中运行,只能使用 libcore 库中的函数和专门的 Rust 抽象,而无法访问标准 Rust 库 (libstd)。
用 Rust 编写的 CUDA 内核允许使用类型保护(safe)、使用 unsafe 代码块以及访问底层硬件指令。为了确保安全性,我们提出了 DisjointSlice 类型,以确保每个线程只能独占访问自己的数据。cuda-oxide 代码采用 Apache 2.0 许可证。
为了实现 Tail 模型,我们提出了 cutile-rs 库。该库支持使用 Rust 惯用语言编写可直接编译为 CUDA 内核的代码。cutile-rs 将 Rust 严格的所有权和借用规则应用于 GPU 上运行的代码。内核被实现为一个单线程程序,操作一个数据块,编译器会自动将计算拆分为多个线程并确保线程同步。线程共享对不可变张量的访问权限,而可变张量则被划分为不相交的数据块以确保安全访问。cutile-rs 代码以 Apache 2.0 许可证发布。
来源: opennet.ru
