Rust Threads on the GPU
7 days ago
- #GPU Programming
- #Rust
- #Concurrency
- VectorWare 宣布成功在 GPU 上应用了 Rust 的 std::thread,使开发者能够利用熟悉的 Rust 抽象编写高性能 GPU 应用程序。
- GPU 通过并行启动内核来执行程序,这与 CPU 显式生成线程不同;这给 Rust 的安全模型带来了挑战。
- 由于 Rust 的所有权模型与 GPU 执行不匹配,将内核视为 FFI(外部函数接口)边界,传统上 GPU 上的 Rust 内核使用不安全代码和原始指针。
- VectorWare 的方法将每个 std::thread 映射到一个 GPU wrap,最初只有一个活动 warp(类似于 CPU 的主线程),并通过 thread::spawn 唤醒其他 warp,以模拟 CPU 并发。
- 这种 warp-as-thread 模型避免了分歧,使 Rust 的借用检查器自然工作,并能与现有 Rust 生态库(如 rayon 和 tokio)集成。
- 优点包括抽象 GPU 细节(warp、block)、实现安全并发,并支持 GPU 上的线程和 async/await,提高 Rust 代码的兼容性。
- 缺点包括有限的 warp 资源、更高的同步成本、可能未充分利用 GPU 处理单元,以及线程栈的内存限制。
- VectorWare 的目标是让 GPU 行为类似于常规 Rust 平台,专注于 GPU 原生应用程序,同时在未来产品中支持多种语言。