char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
47c0eda9d
char/aliceai-t5-moe
1#version 450 2 3#include "types.glsl" 4 5// Fused snake activation: y = x + sin(b * x)^2 * c 6// data_a [ne0, ne1] per element activation x (A_TYPE) 7// data_b [1, ne1] per channel multiplier (float) 8// data_c [1, ne1] per channel inverse scale (float, precomputed as 1 / freq) 9// data_d [ne0, ne1] output y (D_TYPE) 10layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; 11layout (binding = 1) readonly buffer B {float data_b[];}; 12layout (binding = 2) readonly buffer C {float data_c[];}; 13layout (binding = 3) writeonly buffer D {D_TYPE data_d[];}; 14 15layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; 16 17layout (push_constant) uniform parameter { 18 uint32_t ne0; 19 uint32_t ne1; 20} p; 21 22// Load A_TYPE to float 23float load_val(uint32_t idx) { 24#if defined(DATA_A_BF16) 25 return bf16_to_fp32(uint32_t(data_a[idx])); 26#else 27 return float(data_a[idx]); 28#endif 29} 30 31// Store float as D_TYPE 32void store_val(uint32_t idx, float v) { 33#if defined(DATA_D_BF16) 34 data_d[idx] = D_TYPE(fp32_to_bf16(v)); 35#else 36 data_d[idx] = D_TYPE(v); 37#endif 38} 39 40void main() { 41 const uint32_t i0 = gl_GlobalInvocationID.x; 42 const uint32_t i1 = gl_GlobalInvocationID.y; 43 if (i0 >= p.ne0 || i1 >= p.ne1) return; 44 45 const uint32_t idx = i0 + i1 * p.ne0; 46 const float xi = load_val(idx); 47 const float s = sin(data_b[i1] * xi); 48 store_val(idx, xi + s * s * data_c[i1]); 49}