char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
c1258830b
char/aliceai-t5-moe
1@group(0) @binding(0) 2var<storage, read_write> src0: array<f32>; 3 4@group(0) @binding(1) 5var<storage, read_write> src1: array<f32>; 6 7@group(0) @binding(2) 8var<storage, read_write> dst: array<f32>; 9 10struct Params { 11 offset_src0: u32, 12 offset_src1: u32, 13 offset_dst: u32, 14 15 stride_src01: u32, 16 stride_src02: u32, 17 stride_src11: u32, 18 19 stride_dst0: u32, 20 stride_dst1: u32, 21 stride_dst2: u32, 22 23 nc: u32, 24 nr: u32, 25 n_t: u32, 26 n_s: u32, 27 token_tiles: u32, 28}; 29 30@group(0) @binding(3) 31var<uniform> params: Params; 32 33@compute @workgroup_size(BLOCK_SIZE, TOKENS_PER_WG) 34fn main(@builtin(global_invocation_id) gid: vec3<u32>) { 35 let i1 = gid.x; 36 let tile_y = gid.y / TOKENS_PER_WG; 37 let local_token = gid.y % TOKENS_PER_WG; 38 let i3 = tile_y / params.token_tiles; 39 let token_tile = tile_y % params.token_tiles; 40 let i2 = token_tile * TOKENS_PER_WG + local_token; 41 42 if (i1 >= params.nr || i2 >= params.n_t || i3 >= params.n_s) { 43 return; 44 } 45 46 let src0_base = params.offset_src0 + i3 * params.stride_src02 + i2 + i1 * params.stride_src01; 47 let src1_base = params.offset_src1 + i1 * params.stride_src11; 48 49 var sum = 0.0; 50 51#ifdef VECTORIZED 52 sum = 53 src0[src0_base + 0u] * src1[src1_base + 0u] + 54 src0[src0_base + 1u] * src1[src1_base + 1u] + 55 src0[src0_base + 2u] * src1[src1_base + 2u] + 56 src0[src0_base + 3u] * src1[src1_base + 3u]; 57#else 58 for (var i0 = 0u; i0 < params.nc; i0++) { 59 sum += src0[src0_base + i0] * src1[src1_base + i0]; 60 } 61#endif 62 63 let dst_idx = params.offset_dst + i3 * params.stride_dst2 + i2 * params.stride_dst1 + i1 * params.stride_dst0; 64 dst[dst_idx] = sum; 65}