cera 0.5.1

Rust-native LLM inference engine
Documentation
#include <metal_stdlib>
#include <metal_math>
#include <metal_texture>
using namespace metal;

#line 32 "cera/src/backend/shaders/slang/bias_add.slang"
struct KernelContext_0
{
    packed_uint2 device* par_buf_0;
    float device* x_buf_0;
    float device* bias_buf_0;
};


#line 25
[[kernel]] void bias_add(uint3 gid_0 [[thread_position_in_grid]], packed_uint2 device* par_buf_1 [[buffer(2)]], float device* x_buf_1 [[buffer(0)]], float device* bias_buf_1 [[buffer(1)]])
{

#line 25
    thread KernelContext_0 kernelContext_0;

#line 25
    (&kernelContext_0)->par_buf_0 = par_buf_1;

#line 25
    (&kernelContext_0)->x_buf_0 = x_buf_1;

#line 25
    (&kernelContext_0)->bias_buf_0 = bias_buf_1;
    uint i_0 = gid_0.x;

    uint dim_0 = (uint2(*(par_buf_1+int(0))) ).y;
    if(i_0 >= ((uint2(*(par_buf_1+int(0))) ).x))
    {

#line 30
        return;
    }
    float device* _S1 = (&kernelContext_0)->x_buf_0+i_0;

#line 32
    float _S2 = *((&kernelContext_0)->x_buf_0+i_0);

#line 32
    uint _S3 = i_0 % dim_0;

#line 32
    *_S1 = _S2 + (&kernelContext_0)->bias_buf_0[_S3];
    return;
}