// Elementwise activation over the f32-uniform arena. `act` matches the
// `act_id` mapping in src/backend.rs (Activation enum order).
__kernel void unary(__global float* arena,
uint n, uint off_x, uint off_out, uint act) {
uint gid = get_global_id(0) if (gid >= n) return float x = arena[off_x + gid] float r switch (act) {
case 0u: r = 0.5f * x * (1.0f + erf(x * 0.70710678118f)) case 1u: { // GeluApprox (tanh)
float c = 0.7978845608f float t = tanh(c * (x + 0.044715f * x * x * x)) r = 0.5f * x * (1.0f + t) } break case 2u: r = x / (1.0f + exp(-x)) case 3u: r = fmax(x, 0.0f) case 4u: r = 1.0f / (1.0f + exp(-x)) case 5u: r = tanh(x) case 6u: r = exp(x) case 7u: r = log(x) case 8u: r = sqrt(x) case 9u: r = rsqrt(x) case 10u: r = -x case 11u: r = fabs(x) case 12u: r = sin(x) case 13u: r = cos(x) case 14u: r = tan(x) case 15u: r = atan(x) case 16u: r = round(x) default: r = x }
arena[off_out + gid] = r}