#version 450 /* SwiGLU activation: gate = silu(gate) * up, in place on `gate`. * silu(v) = v * sigmoid(v). */ layout(local_size_x = 256) in; layout(std430, binding = 0) buffer Gate { float gate[]; }; layout(std430, binding = 1) readonly buffer Up { float up[]; }; layout(push_constant) uniform PC { uint n; } pc; void main() { uint stride_g = gl_NumWorkGroups.x * 256u; for (uint i = gl_GlobalInvocationID.x; i < pc.n; i += stride_g) { float v = gate[i]; gate[i] = (v / (1.0 + exp(-v))) * up[i]; } }