6 个版本
0.1.5 | 2022 年 3 月 7 日 |
---|---|
0.1.4 | 2022 年 1 月 5 日 |
0.1.3 | 2021 年 11 月 7 日 |
0.1.2 | 2021 年 9 月 24 日 |
在 图形 API 中排名 #736
37KB
703 行
rivi-loader
[dependencies]
rivi-loader = "0.1.5"
rivi-loader 是一个基于 Vulkan 的 GPGPU 应用程序加载器。简而言之,如果您有输入和输出,它将在这些值上运行 SPIR-V 内核。这样,就可以忘记/跳过对 Vulkan 的工作方式的好奇日子。但话虽如此,该库并不能帮助您编写 SPIR-V 或任何其他着色语言。它也不会帮助您进行调度。它所做的是帮助您设置 Vulkan 实例,在该实例上附加调试层,查询具有计算能力的逻辑设备,公开围栏和具有计算能力的队列家族和队列,管理内存和命令缓冲区,并处理具有专用常量支持的着色器创建。此外,还非常关注确保命令缓冲区可以在 CPU 端并行排队和轮询。
示例
fn main() {
let a = vec![1.0f32; 64];
let input = &vec![vec![a]];
let mut output = vec![0.0f32; 1];
let vk = rivi_loader::new(DebugOption::None).unwrap();
let mut cursor = std::io::Cursor::new(&include_bytes!("./reduce/reduce.spv")[..]);
let shader = vk.load_shader(&mut cursor, Some(vec![vec![2]])).unwrap();
vk.compute(input, &mut output, &shader).unwrap();
println!("Result: {:?}", output);
}
功能
- Vulkan 资源的生存期管理
- 支持多 GPU
- 允许在多个队列家族上进行调度
- 允许在单个队列家族的多个队列上进行调度
- 允许设置着色器专用常量
- 支持查询“高级”计算能力,例如子群大小
- 允许在输入和输出缓冲区上使用 Rust 泛型
限制(即此存储库的假设)
- 在您的 SPIR-V 代码中始终应该存在输入向量和输出向量
- 输出向量的长度必须始终静态已知
安装
- 确保已安装 Rust,如果没有,请考虑 rustup
- 确保已安装 Vulkan,如果没有,请考虑 LunarG 以及在 ash 上找到的安装说明
- 运行示例,例如
cargo run --example reduce
.
库
要了解 lib.rs
中发生的事情,请考虑 关于图形应用程序的博客系列.
Periferia Labs
Periferia Labs 是一个临时组成的 GPGPU 玩家朋友小组。查看我们的其他项目
- laskin.live - 在线计算器,但只能在你的远程朋友的GPU上使用
依赖项
约14MB
约312K SLoC