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

GPL-3.0 许可证

37KB
703

rivi-loader

Latest version Docs LICENSE

[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 代码中始终应该存在输入向量和输出向量
  • 输出向量的长度必须始终静态已知

安装

  1. 确保已安装 Rust,如果没有,请考虑 rustup
  2. 确保已安装 Vulkan,如果没有,请考虑 LunarG 以及在 ash 上找到的安装说明
  3. 运行示例,例如 cargo run --example reduce.

要了解 lib.rs 中发生的事情,请考虑 关于图形应用程序的博客系列.

Periferia Labs

Periferia Labs 是一个临时组成的 GPGPU 玩家朋友小组。查看我们的其他项目

  • laskin.live - 在线计算器,但只能在你的远程朋友的GPU上使用

依赖项

约14MB
约312K SLoC