char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
d222767c7
char/aliceai-t5-moe
1// SPDX-FileCopyrightText: Copyright 2025-2026 Arm Limited and/or its affiliates <open-source-office@arm.com> 2// SPDX-License-Identifier: MIT 3// 4 5#pragma once 6 7#include "ggml.h" 8 9enum cpu_feature { 10CPU_FEATURE_NONE = 0 , 11CPU_FEATURE_DOTPROD = 1 , 12CPU_FEATURE_I8MM = 2 , 13CPU_FEATURE_SVE = 4 , 14CPU_FEATURE_SME = 8 , 15CPU_FEATURE_SME2 = 16 , 16CPU_FEATURE_FP16 = 32 17}; 18 19inline cpu_feature & operator |=(cpu_feature & lhs ,cpu_feature rhs ) { 20lhs = static_cast < cpu_feature > (lhs |rhs ); 21return lhs ; 22} 23inline cpu_feature operator |(cpu_feature lhs ,cpu_feature rhs ) { 24return static_cast < cpu_feature > (static_cast < int > (lhs ) |static_cast < int > (rhs )); 25} 26 27struct kernel_info { 28size_t (* get_m_step )(void ); 29size_t (* get_n_step )(void ); 30size_t (* get_mr )(void ); 31size_t (* get_nr )(void ); 32size_t (* get_kr )(void ); 33size_t (* get_sr )(void ); 34 35size_t (* get_dst_offset )(size_t m_idx ,size_t n_idx ,size_t stride ); 36size_t (* get_dst_size )(size_t m ,size_t n ); 37 38size_t (* get_lhs_offset_ex )(size_t m_idx ,size_t k ,size_t bl ); 39 40size_t (* get_rhs_packed_offset_ex )(size_t n_idx ,size_t k ,size_t bl ); 41 42void (* run_kernel_ex )( 43size_t m ,size_t n ,size_t k ,size_t bl , 44const void * lhs_packed ,const void * rhs_packed , 45void * dst ,size_t dst_stride_row ,size_t dst_stride_col , 46float clamp_min ,float clamp_max ); 47}; 48 49struct lhs_packing_info { 50size_t (* get_offset )(size_t m_idx ,size_t lhs_stride ); 51 52size_t (* get_packed_offset_ex )(size_t m_idx ,size_t k ,size_t bl ,size_t mr ,size_t kr ,size_t sr ); 53 54size_t (* packed_size_ex )(size_t m ,size_t k ,size_t bl ,size_t mr ,size_t kr ,size_t sr ); 55 56void (* pack_func_ex )(size_t m ,size_t k ,size_t bl ,size_t mr ,size_t kr ,size_t sr , 57size_t m_idx_start ,const void * lhs ,size_t lhs_stride ,void * lhs_packed ); 58}; 59 60enum rhs_repack_mode { 61RHS_REPACK_PER_KERNEL , 62RHS_REPACK_SHARED , 63RHS_REPACK_SINGLE_ONLY , 64}; 65 66struct rhs_packing_info { 67size_t (* packed_stride )(size_t k ,size_t nr ,size_t kr ,size_t bl ); 68 69void (* to_float )(const void * packed_data ,int32_t row_idx ,int64_t nc ,float * out , 70size_t nr_pack ,size_t packed_row_stride ,size_t kr ,size_t bl , 71size_t num_bytes_multiplier ); 72 73size_t (* packed_size_ex )(size_t n ,size_t k ,size_t nr ,size_t kr ,size_t bl ); 74 75size_t (* packed_stride_ex )(size_t k ,size_t nr ,size_t kr ,size_t bl ); 76 77void (* pack_func_ex )(size_t num_groups ,size_t n ,size_t k ,size_t nr ,size_t kr ,size_t sr ,size_t bl , 78size_t rhs_stride ,const void * rhs ,const void * bias ,const void * scale ,void * rhs_packed ,size_t extra_bytes ,const void * params ); 79 80rhs_repack_mode repack_mode = RHS_REPACK_PER_KERNEL ; 81}; 82 83struct ggml_kleidiai_kernels { 84kernel_info gemm ; 85lhs_packing_info gemm_lhs_info ; 86 87kernel_info gemv ; 88lhs_packing_info gemv_lhs_info ; 89 90rhs_packing_info rhs_info ; 91 92cpu_feature required_cpu ; 93ggml_type lhs_type ; 94ggml_type rhs_type ; 95ggml_type op_type ; 96}; 97 98ggml_kleidiai_kernels * ggml_kleidiai_select_kernels (cpu_feature cpu_features ,const ggml_tensor * tensor ); 99ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q4_0 (cpu_feature features ); 100ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q8_0 (cpu_feature features ); 101ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_f32 (cpu_feature features );