cera 0.5.2

Rust-native LLM inference engine
Documentation
@binding(4) @group(0) var<storage, read> par_buf_0 : array<u32>;

@binding(1) @group(0) var<storage, read_write> rbuf_0 : array<f32>;

@binding(2) @group(0) var<storage, read> w_buf_0 : array<f32>;

@binding(0) @group(0) var<storage, read> in_buf_0 : array<f32>;

@binding(3) @group(0) var<storage, read_write> out_buf_0 : array<f32>;

@compute
@workgroup_size(256, 1, 1)
fn conv1d_depthwise(@builtin(global_invocation_id) gid_0 : vec3<u32>)
{
    var ch_0 : u32 = gid_0.x;
    var hs_0 : u32 = par_buf_0[i32(0)];
    var ks_0 : u32 = par_buf_0[i32(1)];
    var d_conv_0 : u32 = par_buf_0[i32(2)];
    if(ch_0 >= hs_0)
    {
        return;
    }
    var k_0 : u32 = u32(0);
    var sum_0 : f32 = 0.0f;
    for(;;)
    {
        if(k_0 < d_conv_0)
        {
        }
        else
        {
            break;
        }
        var sum_1 : f32 = sum_0 + rbuf_0[k_0 * hs_0 + ch_0] * w_buf_0[ch_0 * ks_0 + k_0];
        k_0 = k_0 + u32(1);
        sum_0 = sum_1;
    }
    out_buf_0[ch_0] = sum_0 + in_buf_0[ch_0] * w_buf_0[ch_0 * ks_0 + d_conv_0];
    if(d_conv_0 > u32(1))
    {
        k_0 = u32(0);
        for(;;)
        {
            if(k_0 < (d_conv_0 - u32(1)))
            {
            }
            else
            {
                break;
            }
            var _S1 : u32 = k_0 + u32(1);
            rbuf_0[k_0 * hs_0 + ch_0] = rbuf_0[_S1 * hs_0 + ch_0];
            k_0 = _S1;
        }
    }
    if(d_conv_0 > u32(0))
    {
        rbuf_0[(d_conv_0 - u32(1)) * hs_0 + ch_0] = in_buf_0[ch_0];
    }
    return;
}