char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
efaaccdd6
char/aliceai-t5-moe
1#include "pad_reflect_1d.hpp" 2 3static void pad_reflect_1d_kernel_f32 ( 4const void * __restrict__src0 ,void * __restrict__dst ,const int64_t ne0 , 5const int64_t ne00 ,const sycl::uint3 ne01 ,const int64_t ne02 , 6const int64_t ne03 ,const int64_t nb00 ,const int64_t nb01 , 7const int64_t nb02 ,const int64_t nb03 ,const int64_t nb0 , 8const int64_t nb1 ,const int64_t nb2 ,const int64_t nb3 ,const int p0 , 9const int p1 , sycl::nd_item < 3 > item_ct1 ) { 10 11const int64_t i3 = item_ct1 .get_group (0 ); 12const int64_t i2 = item_ct1 .get_group (1 ); 13 14const sycl::uint2 div_mod_packed = 15fast_div_modulo (item_ct1 .get_group (2 ),ne01 ); 16const int64_t tile1 = div_mod_packed .y (); 17const int64_t tile0 = div_mod_packed .x (); 18const int64_t i1 = tile1 ; 19const int64_t i0 = 20item_ct1 .get_local_id (2 )+ tile0 * item_ct1 .get_local_range (2 ); 21 22if (i0 >=ne0 || i1 >=ne01 .z ()|| i2 >=ne02 || i3 >=ne03 ) { 23return ; 24 } 25 26const char * src0_ptr = 27 (const char * )src0 + i3 * nb03 + i2 * nb02 + i1 * nb01 ; 28char * dst_ptr = (char * )dst + i3 * nb3 + i2 * nb2 + i1 * nb1 ; 29 30const int64_t rel_i0 = i0 - p0 ;// relative i0 in src0 31int64_t src_idx ; 32 33if (rel_i0 < 0 ) { 34// Left padding - reflect 35src_idx = - rel_i0 ; 36 }else if (rel_i0 < ne00 ) { 37// Middle - copy 38src_idx = rel_i0 ; 39 }else { 40// Right padding - reflect 41src_idx = 2 * ne00 - 2 - rel_i0 ; 42 } 43const float value = * (const float * )(src0_ptr + src_idx * nb00 ); 44* (float * )(dst_ptr + i0 * nb0 )= value ; 45 46GGML_UNUSED (p1 ); 47} 48 49void ggml_sycl_op_pad_reflect_1d (ggml_backend_sycl_context & ctx , 50ggml_tensor * dst ) { 51 52const ggml_tensor * src0 = dst -> src [0 ]; 53 dpct::queue_ptr stream = ctx .stream (); 54 55GGML_ASSERT (src0 -> type == GGML_TYPE_F32 ); 56GGML_ASSERT (dst -> type == GGML_TYPE_F32 ); 57 58const int32_t * opts = (const int32_t * )dst -> op_params ; 59const int p0 = opts [0 ]; 60const int p1 = opts [1 ]; 61 62const int64_t ne00 = src0 -> ne [0 ]; 63const int64_t ne01 = src0 -> ne [1 ]; 64const sycl::uint3 ne01_packed = init_fastdiv_values (ne01 ); 65const int64_t ne02 = src0 -> ne [2 ]; 66const int64_t ne03 = src0 -> ne [3 ]; 67 68const int64_t ne0 = dst -> ne [0 ]; 69 70GGML_ASSERT (ne0 == ne00 + p0 + p1 ); 71 72constexpr int64_t bx = SYCL_PAD_REFLECT_1D_BLOCK_SIZE ; 73const int64_t tiles0 = (ne0 + bx - 1 ) /bx ; 74const dpct::dim3 grid_dims ((unsigned )(ne01 * tiles0 ), (unsigned )ne02 , 75 (unsigned )ne03 ); 76const dpct::dim3 block_dims ((unsigned )bx ,1 ,1 ); 77 78stream -> submit ([& ](sycl::handler & cgh ) { 79auto src0_data_ct0 = src0 -> data ; 80auto dst_data_ct1 = dst -> data ; 81auto src0_nb_ct7 = src0 -> nb [0 ]; 82auto src0_nb_ct8 = src0 -> nb [1 ]; 83auto src0_nb_ct9 = src0 -> nb [2 ]; 84auto src0_nb_ct10 = src0 -> nb [3 ]; 85auto dst_nb_ct11 = dst -> nb [0 ]; 86auto dst_nb_ct12 = dst -> nb [1 ]; 87auto dst_nb_ct13 = dst -> nb [2 ]; 88auto dst_nb_ct14 = dst -> nb [3 ]; 89 90cgh .parallel_for (sycl::nd_range < 3 > (grid_dims * block_dims ,block_dims ), 91 [= ](sycl::nd_item < 3 > item_ct1 ) { 92pad_reflect_1d_kernel_f32 ( 93src0_data_ct0 ,dst_data_ct1 ,ne0 ,ne00 , 94ne01_packed ,ne02 ,ne03 ,src0_nb_ct7 , 95src0_nb_ct8 ,src0_nb_ct9 ,src0_nb_ct10 , 96dst_nb_ct11 ,dst_nb_ct12 ,dst_nb_ct13 , 97dst_nb_ct14 ,p0 ,p1 ,item_ct1 ); 98 }); 99 }); 100}