cera 0.2.5

Rust-native LLM inference engine
Documentation
// Broadcast bias add, in-place: x[t*dim + j] += bias[j].
//
// Linear-layer bias is a single [dim] vector added to every one of the `rows`
// token rows. Plain `elementwise.add_inplace` can't express the broadcast.
//
// Dispatch: (ceil(rows*dim / 256), 1, 1) workgroups.
//
// Bind group 0:
//   @binding(0) x: array<f32>      (read-write — rows*dim elements)
//   @binding(1) bias: array<f32>   (read — dim elements)
//   @binding(2) params: vec2<u32>  (total = rows*dim, dim)

@group(0) @binding(0) var<storage, read_write> x: array<f32>;
@group(0) @binding(1) var<storage, read> bias: array<f32>;
@group(0) @binding(2) var<storage, read> params: vec2<u32>;

@compute @workgroup_size(256, 1, 1)
fn bias_add(@builtin(global_invocation_id) gid: vec3<u32>) {
    let i = gid.x;
    let total = params.x;
    let dim = params.y;
    if i >= total { return; }
    x[i] = x[i] + bias[i % dim];
}