char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
f401bb139
char/aliceai-t5-moe
1enable f16; 2 3@group(0) @binding(0) 4var<storage, read_write> input: array<INPUT_TYPE>; 5@group(0) @binding(1) 6var<storage, read_write> output: array<OUTPUT_TYPE>; 7 8struct Params { 9 offset_i: u32, 10 offset_o: u32, 11 12 // element strides 13 si0: u32, si1: u32, si2: u32, si3: u32, 14 so0: u32, so1: u32, so2: u32, so3: u32, 15 16 KW: u32, KH: u32, IC: u32, 17 IW: u32, IH: u32, N: u32, 18 OW: u32, OH: u32, 19 20 // stride 21 s0: u32, s1: u32, 22 // padding 23 p0: u32, p1: u32, 24 // dilation 25 d0: u32, d1: u32, 26} 27 28@group(0) @binding(2) 29var<uniform> params: Params; 30 31@compute @workgroup_size(WG_SIZE) 32fn main( 33 @builtin(global_invocation_id) gid: vec3<u32>, 34 @builtin(num_workgroups) num_wg: vec3<u32> 35) { 36 37 let threads_per_group = u32(WG_SIZE); 38 let i_out = gid.x + (num_wg.x * threads_per_group) * gid.y; 39 let K = params.KW * params.KH * params.IC; 40 let M = params.OW * params.OH; 41 let total = K * M * params.N; 42 43 if (i_out >= total) { 44 return; 45 } 46 47 // decode (k, m, n) 48 var i = i_out; 49 let n = i / (K * M); 50 i = i % (K * M); 51 let m = i / K; 52 let k = i % K; 53 54 // decode (oh, ow) 55 let oh = m / params.OW; 56 let ow = m % params.OW; 57 58 // decode (kw, kh, ic) 59 let kw = k % params.KW; 60 let tmp = k / params.KW; 61 let kh = tmp % params.KH; 62 let ic = tmp / params.KH; 63 64 let iw_i32 = i32(ow * params.s0 + kw * params.d0) - i32(params.p0); 65 let ih_i32 = i32(oh * params.s1 + kh * params.d1) - i32(params.p1); 66 67 let output_idx = params.offset_o + k * params.so0 + ow * params.so1 + oh * params.so2 + n * params.so3; 68 69 if (iw_i32 >= 0 && iw_i32 < i32(params.IW) && ih_i32 >= 0 && ih_i32 < i32(params.IH)) { 70 let iw = u32(iw_i32); 71 let ih = u32(ih_i32); 72 let in_idx = params.offset_i + iw * params.si0 + ih * params.si1 + ic * params.si2 + n * params.si3; 73 output[output_idx] = OUTPUT_TYPE(input[in_idx]); 74 } else { 75 output[output_idx] = OUTPUT_TYPE(0.0); 76 } 77}