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 异步

Download history 41/week @ 2024-04-06 83/week @ 2024-04-13 119/week @ 2024-04-20 61/week @ 2024-04-27 104/week @ 2024-05-04 97/week @ 2024-05-11 75/week @ 2024-05-18 78/week @ 2024-05-25 130/week @ 2024-06-01 67/week @ 2024-06-08 207/week @ 2024-06-15 96/week @ 2024-06-22 90/week @ 2024-06-29 94/week @ 2024-07-06 60/week @ 2024-07-13 95/week @ 2024-07-20

每月 361 次下载
async-tensorrt 中使用

MIT/Apache

200KB
4K SLoC

async-cuda

为 Rust 提供的异步 CUDA。

version license docs

ℹ️ 简介

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-2.0 许可证定义的,旨在包含在作品中的故意提交的贡献,将根据上述条款双许可,不附加任何额外条款或条件。

依赖项

~1–2.3MB
~43K SLoC