char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
082b326fc
char/aliceai-t5-moe
1 2message ( STATUS "Using ET backend" ) 3 4# Configure ET platform path 5if ( DEFINED ENV{ET_PLATFORM}) 6set ( ET_PLATFORM_PATH $ ENV { ET_PLATFORM }) 7else () 8set ( ET_PLATFORM_PATH "/opt/et" ) 9endif () 10 11# Use sysemu for ET backend if compiled with `-DGGML_ET_SYSEMU=ON` 12if ( GGML_ET_SYSEMU) 13message ( STATUS "Using ET backend with sysemu instead of hardware" ) 14else () 15message ( STATUS "Using ET backend with hardware device" ) 16endif () 17 18# Add ET platform CMake modules and config files to search paths 19list ( APPEND CMAKE_PREFIX_PATH ${ ET_PLATFORM_PATH } /lib/cmake ) 20list ( APPEND CMAKE_MODULE_PATH ${ ET_PLATFORM_PATH } /lib/cmake ) 21include ( aifoundry-utils/ProjectFunctions ) 22 23message ( STATUS "Using ET Platform at ${ ET_PLATFORM_PATH } " ) 24 25find_package ( runtime REQUIRED ) 26 27# Kernel list 28set ( KERNELS 29el_map_f32 30flash_attn_ext_f32 31glu_f32 32scale_f32 33mul_mat_f32 34mul_mat_f32_matrix_engine 35mul_mat_id_f32 36mul_mat_id_Q4_0 37mul_mat_id_Q8_0 38mul_mat_Q8_0 39mul_mat_Q4_0 40mul_mat_Q4_0_matrix_engine 41mul_mat_f16 42mul_mat_f16_matrix_engine 43rope_f32 44unary_f32 45sqr_f32 46clamp_f32 47sum_rows_f32 48mean_f32 49cumsum_f32 50norm_f32 51l2_norm_f32 52group_norm_f32 53rms_norm_f32 54rms_norm_mul_f32 55softmax_f32 56im2col 57get_rows_f32 58concat_f32 59repeat_f32 60rwkv_wkv6_f32 61rwkv_wkv7_f32 62gated_delta_net_f32 63cont_f32 64cont_f16 65cpy_f32_f16 66flash_attn_ext_f16_me 67set_rows_f32 68set_f32 69fill_f32 70pad_f32 71diag_f32 72tri_f32 73solve_tri_f32 74ssm_conv_f32 75ssm_scan_f32 76conv_2d_f32_me 77memops 78uberkernel 79) 80 81# Kernels that we support dispatch form Uberkernel 82set ( UBERKERNEL_SUPPORTED_KERNELS 83el_map_f32 84# unary_f32 85# cpy_f32_f16 86# cont_f32 87# get_rows_f32 88concat_f32 89cont_f16 90cumsum_f32 91diag_f32 92fill_f32 93flash_attn_ext_f16_me 94flash_attn_ext_f32 95gated_delta_net_f32 96glu_f32 97group_norm_f32 98im2col 99l2_norm_f32 100mul_mat_f16 101mul_mat_f16_matrix_engine 102mul_mat_f32 103mul_mat_f32_matrix_engine 104mul_mat_id_f32 105mul_mat_Q4_0 106mul_mat_Q8_0 107norm_f32 108pad_f32 109repeat_f32 110rms_norm_f32 111rms_norm_mul_f32 112rope_f32 113rwkv_wkv6_f32 114rwkv_wkv7_f32 115scale_f32 116set_f32 117set_rows_f32 118softmax_f32 119solve_tri_f32 120sqr_f32 121# ssm_conv_f32 122ssm_scan_f32 123sum_rows_f32 124tri_f32 125) 126 127set ( UBERKERNEL_MAP_HPP ${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/ggml-et-uberkernel-kernel-map.h ) 128set ( UBERKERNEL_MAP_CPP ${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/ggml-et-uberkernel-kernel-map.cpp ) 129 130set ( UBERKERNEL_KERNELS_SORTED ${ UBERKERNEL_SUPPORTED_KERNELS }) 131list ( SORT UBERKERNEL_KERNELS_SORTED ) 132 133set ( UBERKERNEL_ENUM_ENTRIES "" ) 134set ( UBERKERNEL_MAP_ENTRIES "" ) 135set ( _uk_idx 1 ) 136foreach ( KERNEL${ UBERKERNEL_KERNELS_SORTED }) 137string ( TOUPPER ${ KERNEL } _uk_upper ) 138string ( APPEND UBERKERNEL_ENUM_ENTRIES 139" GGML_ET_UBERKERNEL_KERNEL_ ${ _uk_upper } = ${ _uk_idx } ,\n" ) 140string ( APPEND UBERKERNEL_MAP_ENTRIES 141" {\" ${ KERNEL } \", GGML_ET_UBERKERNEL_KERNEL_ ${ _uk_upper } },\n" ) 142math ( EXPR _uk_idx " ${ _uk_idx } + 1" ) 143endforeach () 144 145configure_file ( 146${ CMAKE_CURRENT_SOURCE_DIR } /cmake/ggml-et-uberkernel-kernel-map.h.in 147${ UBERKERNEL_MAP_HPP } 148@ONLY ) 149configure_file ( 150${ CMAKE_CURRENT_SOURCE_DIR } /cmake/ggml-et-uberkernel-kernel-map.cpp.in 151${ UBERKERNEL_MAP_CPP } 152@ONLY ) 153 154add_custom_target ( et-uberkernel-map 155DEPENDS ${ UBERKERNEL_MAP_HPP } ${ UBERKERNEL_MAP_CPP } 156) 157 158# Build ET kernels (cross-compiled in subdirectory scope) 159add_subdirectory ( et-kernels ) 160 161# Embed kernels into C++ source 162set ( EMBED_SCRIPT ${ CMAKE_CURRENT_SOURCE_DIR } /cmake/embed_one_kernel.cmake ) 163set ( EMBED_HPP ${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/ggml-et-kernels-embed.hpp ) 164set ( EMBED_CPP ${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/ggml-et-kernels-embed.cpp ) 165set ( EMBED_DIR ${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/embed ) 166file ( MAKE_DIRECTORY ${ EMBED_DIR }) 167 168set ( EMBED_KERNEL_SOURCES ) 169set ( EMBED_EXTERNS "" ) 170set ( EMBED_MAP_ENTRIES "" ) 171 172foreach ( KERNEL${ KERNELS }) 173set ( ELF_PATH ${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/ ${ KERNEL } .elf ) 174set ( OUT_CPP ${ EMBED_DIR } / ${ KERNEL } .cpp ) 175 176add_custom_command ( 177OUTPUT ${ OUT_CPP } 178COMMAND ${ CMAKE_COMMAND } 179-DELF_FILE= ${ ELF_PATH } 180-DOUT_FILE= ${ OUT_CPP } 181-DVAR_NAME= ${ KERNEL } 182-P ${ EMBED_SCRIPT } 183DEPENDS ${ KERNEL } .elf ${ EMBED_SCRIPT } 184COMMENT "Embedding ${ KERNEL } .elf" 185VERBATIM 186) 187list ( APPEND EMBED_KERNEL_SOURCES ${ OUT_CPP }) 188 189string ( APPEND EMBED_EXTERNS 190"extern unsigned char ${ KERNEL } _data[];\n" 191"extern const uint64_t ${ KERNEL } _len;\n" ) 192string ( APPEND EMBED_MAP_ENTRIES 193" {\" ${ KERNEL } \", { ${ KERNEL } _data, ${ KERNEL } _len}},\n" ) 194endforeach () 195 196configure_file ( 197${ CMAKE_CURRENT_SOURCE_DIR } /cmake/ggml-et-kernels-embed.hpp.in 198${ EMBED_HPP } 199@ONLY ) 200configure_file ( 201${ CMAKE_CURRENT_SOURCE_DIR } /cmake/ggml-et-kernels-embed.cpp.in 202${ EMBED_CPP } 203@ONLY ) 204 205add_custom_target ( et-kernels-embed ALL 206DEPENDS ${ EMBED_KERNEL_SOURCES } ${ EMBED_HPP } ${ EMBED_CPP } et-uberkernel-map 207) 208 209ggml_add_backend_library ( ggml-et 210ggml-et.cpp 211ggml-et-kernels.cpp 212ggml-et-memops.cpp 213ggml-et-ops.cpp 214ggml-et-cpu-compare.cpp 215) 216 217# Mark generated files as such 218set_source_files_properties ( 219${ EMBED_CPP } 220${ EMBED_HPP } 221${ EMBED_KERNEL_SOURCES } 222${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/ggml-et-uberkernel-kernel-map.cpp 223${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/ggml-et-uberkernel-kernel-map.h 224PROPERTIES GENERATED TRUE 225) 226 227# Add embedded kernel sources 228target_sources ( ggml-et PRIVATE 229${ EMBED_CPP } 230${ EMBED_HPP } 231${ EMBED_KERNEL_SOURCES } 232${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/ggml-et-uberkernel-kernel-map.cpp 233${ CMAKE_CURRENT_BINARY_DIR } /et-kernels/ggml-et-uberkernel-kernel-map.h 234) 235 236# Include directory for embedded headers 237target_include_directories ( ggml-et PRIVATE ${ CMAKE_CURRENT_BINARY_DIR } /et-kernels ) 238 239target_link_libraries ( ggml-et PRIVATE runtime::etrt_static deviceLayer::deviceLayer ) 240target_compile_definitions ( ggml-et PRIVATE GGML_ET_UBERKERNEL_HOST_LOOKUP ) 241if ( GGML_ET_SYSEMU) 242target_compile_definitions ( ggml-et PRIVATE GGML_ET_SYSEMU=1 ) 243endif () 244 245# Ensure kernels are built and embedded before the backend library 246add_dependencies ( ggml-et et-kernels-embed et-uberkernel-map )