5 个版本
0.5.4 | 2023 年 8 月 15 日 |
---|---|
0.5.3 | 2023 年 8 月 15 日 |
0.5.2 | 2023 年 8 月 14 日 |
0.5.1 | 2023 年 8 月 14 日 |
0.5.0 | 2023 年 8 月 14 日 |
#581 in 异步
每月 361 次下载
在 async-tensorrt 中使用
200KB
4K SLoC
async-cuda
为 Rust 提供的异步 CUDA。
ℹ️ 简介
async-cuda
是一个用于异步与 GPU 交互的实验性库。由于 GPU 只是从程序的角度来看的一个 I/O 设备,因此异步模型实际上非常适合。在 async-cuda
中实现的方式是,所有操作都安排在单个运行时线程上,该线程驱动 GPU。此库的接口强制同步在必要时发生(并且同步本身也是异步的)。
在常见的 CUDA 原语之上,此库还包括 NVIDIA 的 NPP 库的异步包装器。
TensorRT 的异步包装器已移至此处的一个单独的仓库:async-tensorrt
。
🛠️ 状态
此项目仍在进行中,将包含错误。API 的某些部分尚未完善。请谨慎使用。
📦 设置
确保您已安装必要的依赖项
- CUDA 工具包 11 或更高版本。
然后,将以下内容添加到 Cargo.toml
中的依赖项
async-cuda = "0.5"
以启用 NPP 函数
async-cuda = { version = "0.5", features = ["npp"] }
⚠️ 安全警告
此 crate 是 故意不安全的。由于当前异步 Rust 的工作方式存在限制,使用此 crate 的异步接口在某些罕见情况下可能会导致未定义的行为。用户必须遵守以下规则,以防止这种情况发生
- 此 crate 中函数产生的任何 futures 都不能泄露(无论是通过
std::mem::forget
还是其他方式)。 - 使用行为良好的运行时(例如 Tokio 或 async-std)。
在内部,此包中的 Future
类型会在单独的运行时线程上调度 CUDA 调用。为了使 API 尽可能地易用,将闭包(即发送到运行时的闭包)的生命周期限制与未来对象绑定。为了强制执行此限制,如果未来对象被丢弃,未来对象将阻塞并等待。此机制依赖于未来对象被驱动完成,而不是被遗忘。这并不一定得到保证。如果运行时放弃或遗忘未来,或者调用者手动轮询未来,然后遗忘它,可能会出现不安全性。
许可证
根据以下任一许可证授权:
- Apache License 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确说明,否则任何根据 Apache-2.0 许可证定义的,旨在包含在作品中的故意提交的贡献,将根据上述条款双许可,不附加任何额外条款或条件。
依赖项
~1–2.3MB
~43K SLoC