char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
7a2db1a0c
char/aliceai-t5-moe
1enable f16; 2 3struct Params { 4 ne: u32, 5 6 offset_src0: u32, 7 offset_dst: u32, 8 9 stride_src0_0: u32, 10 stride_src0_1: u32, 11 stride_src0_2: u32, 12 stride_src0_3: u32, 13 14 a_ne0: u32, 15 a_ne1: u32, 16 a_ne2: u32, 17 a_ne3: u32, 18 19 ne0: u32, 20 ne1: u32, 21 ne2: u32, 22}; 23 24#ifdef TYPE_F32 25#define DataType f32 26#endif 27#ifdef TYPE_I32 28#define DataType i32 29#endif 30#ifdef TYPE_F16 31#define DataType f16 32#endif 33#ifdef TYPE_I16 34// same size (16-bit) is sufficient for repeat 35#define DataType f16 36#endif 37 38@group(0) @binding(0) 39var<storage, read_write> src0: array<DataType>; 40 41@group(0) @binding(1) 42var<storage, read_write> dst: array<DataType>; 43 44@group(0) @binding(2) 45var<uniform> params: Params; 46 47@compute @workgroup_size(WG_SIZE) 48fn main(@builtin(global_invocation_id) gid: vec3<u32>) { 49 if (gid.x < params.ne) { 50 var i = gid.x; 51 let i3 = i / (params.ne2 * params.ne1 * params.ne0); 52 i = i % (params.ne2 * params.ne1 * params.ne0); 53 let i2 = i / (params.ne1 * params.ne0); 54 i = i % (params.ne1 * params.ne0); 55 let i1 = i / params.ne0; 56 let i0 = i % params.ne0; 57 58 let a_i0 = i0 % params.a_ne0; 59 let a_i1 = i1 % params.a_ne1; 60 let a_i2 = i2 % params.a_ne2; 61 let a_i3 = i3 % params.a_ne3; 62 63 let a_index = a_i0 * params.stride_src0_0 + 64 a_i1 * params.stride_src0_1 + 65 a_i2 * params.stride_src0_2 + 66 a_i3 * params.stride_src0_3; 67 68 dst[params.offset_dst + gid.x] = src0[params.offset_src0 + a_index]; 69 } 70}