#cuda #gpu #async #nvidia

async-cuda-core

Rust的异步CUDA流和缓冲区

7个不稳定版本 (3个重大变更)

0.4.0 2023年8月10日
0.3.0 2023年8月8日
0.2.0 2023年8月8日
0.1.3 2023年6月15日

#1849 in 异步


用于 async-cuda-npp

MIT/Apache

120KB
2K SLoC

async-cuda-core

异步CUDA流和缓冲区。

version license docs

ℹ️ 简介

async-cuda-core 是一个用于异步与GPU交互的实验性库。由于GPU只是另一个I/O设备(从你的程序的角度来看),异步模型实际上非常适合。在 async-cuda-core 中实现的方式是,所有操作都在一个驱动GPU的单个运行时线程上调度。该库的接口强制要求在必要时进行同步(并且同步本身也是异步的)。

🛠 状态

该项目仍在进行中,可能存在错误。API的一些部分尚未完善。请谨慎使用。

📦 设置

确保已安装必要的依赖项

  • CUDA工具包11或更高版本。

然后,将以下内容添加到你的 Cargo.toml 依赖项中

async-cuda-core = "0.1"

⚠️ 安全警告

这个crate是 故意不安全的。由于当前异步Rust的局限性,使用此crate的异步接口在某些罕见情况下可能导致未定义的行为。防止这种情况发生的责任在于用户,他们必须遵循以下规则

  • 此crate中函数产生的任何futures都不能泄漏(无论是通过 std::mem::forget 还是其他方式)。
  • 使用行为良好的运行时(例如不会忘记你的future的Tokio或async-std)。

内部,此crate中的 Future 类型在单独的运行时线程上调度CUDA调用。为了使API尽可能方便,将闭包(发送到运行时的)的生命周期限制绑定到future对象。为了强制执行此限制,如果future被丢弃,它将阻塞并等待。此机制依赖于future被驱动完成,而不是忘记。这并不一定能得到保证。如果运行时放弃或忘记future,或者调用者手动轮询future然后忘记它,则可能产生不安全性。

许可证

以下任一许可下授权

由您选择。

贡献

除非您明确说明,否则您提交的任何有意包含在作品中的贡献,根据Apache-2.0许可证定义,应如上双重许可,不附加任何额外条款或条件。

依赖项

~1–2.4MB
~44K SLoC