#web-gpu #gpu #compute #sgpu

sgpu-compute

使用WebGPU的简单GPU-Compute

1个不稳定版本

0.1.0 2024年3月10日

#610图形API

MIT 许可证

23KB
401

SGPU-Compute

Simple GPU-Compute using WebGPU

这个crate旨在提供使用WGPU和WGSL运行计算着色器的简单易用的接口。它设计得尽可能简单,同时为了性能原因,仍提供了很多灵活性。

快速入门

use sgpu_compute::prelude::*;

let my_shader = "
   @group(0) @binding(0) var<uniform> coefficient: u32;
   @group(0) @binding(1) var<storage, read> in: array<u32>;
   @group(0) @binding(2) var<storage, read_write> out: array<u32>;
   @compute
   @workgroup_size(8, 1, 1)
   fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
       out[global_id.x] = coefficient * in[global_id.x];
   }
";

const N_ELEMENT: usize = 64;
const WORKGROUP_SIZE: usize = 8;
const N_WORKGROUP: u32 = (N_ELEMENT / WORKGROUP_SIZE) as u32;

let gpu = GpuCompute::new();
let mut pipeline = gpu.gen_pipeline(
       None,
       [StageDesc {
           name: Some("norm"),
           shader: my_shader,
           entrypoint: "main",
       }],
   );

const COEFFICIENT: u32 = 42;
let input: [u32; N_ELEMENT] = std::array::from_fn(|i| i as u32);
pipeline.write_uniform(&COEFFICIENT);
let result_gpu = pipeline.run(&input, [(N_WORKGROUP, 1, 1)], |vals: &[u32; N_ELEMENT]| *vals);
let result_cpu = input.map(|v| v * COEFFICIENT);
assert_eq!(result_gpu, result_cpu);

功能

  • 使用WGPU进行计算快速设置
  • 提供阻塞和异步API
  • 支持多阶段着色器

示例

示例文件位于示例目录中

依赖项

~3–34MB
~516K SLoC