char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
f15bd6090
char/aliceai-t5-moe
1#pragma once 2 3#include "ggml.h" 4#include "ggml-backend.h" 5 6#ifdef __cplusplus 7extern "C" { 8#endif 9 10// the compute plan that needs to be prepared for ggml_graph_compute() 11// since https://github.com/ggml-org/ggml/issues/287 12struct ggml_cplan { 13size_t work_size ;// size of work buffer, calculated by `ggml_graph_plan()` 14uint8_t * work_data ;// work buffer, to be allocated by caller before calling to `ggml_graph_compute()` 15 16int n_threads ; 17struct ggml_threadpool * threadpool ; 18 19// abort ggml_graph_compute when true 20ggml_abort_callback abort_callback ; 21void * abort_callback_data ; 22 23// use only reference implementations 24bool use_ref ; 25 }; 26 27// numa strategies 28enum ggml_numa_strategy { 29GGML_NUMA_STRATEGY_DISABLED = 0 , 30GGML_NUMA_STRATEGY_DISTRIBUTE = 1 , 31GGML_NUMA_STRATEGY_ISOLATE = 2 , 32GGML_NUMA_STRATEGY_NUMACTL = 3 , 33GGML_NUMA_STRATEGY_MIRROR = 4 , 34GGML_NUMA_STRATEGY_COUNT 35 }; 36 37GGML_BACKEND_API void ggml_numa_init (enum ggml_numa_strategy numa );// call once for better performance on NUMA systems 38GGML_BACKEND_API bool ggml_is_numa (void );// true if init detected that system has >1 NUMA node 39 40GGML_BACKEND_API struct ggml_tensor * ggml_new_i32 (struct ggml_context * ctx ,int32_t value ); 41GGML_BACKEND_API struct ggml_tensor * ggml_new_f32 (struct ggml_context * ctx ,float value ); 42 43GGML_BACKEND_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor ,int32_t value ); 44GGML_BACKEND_API struct ggml_tensor * ggml_set_f32 (struct ggml_tensor * tensor ,float value ); 45 46GGML_BACKEND_API int32_t ggml_get_i32_1d (const struct ggml_tensor * tensor ,int i ); 47GGML_BACKEND_API void ggml_set_i32_1d (const struct ggml_tensor * tensor ,int i ,int32_t value ); 48 49GGML_BACKEND_API int32_t ggml_get_i32_nd (const struct ggml_tensor * tensor ,int i0 ,int i1 ,int i2 ,int i3 ); 50GGML_BACKEND_API void ggml_set_i32_nd (const struct ggml_tensor * tensor ,int i0 ,int i1 ,int i2 ,int i3 ,int32_t value ); 51 52GGML_BACKEND_API float ggml_get_f32_1d (const struct ggml_tensor * tensor ,int i ); 53GGML_BACKEND_API void ggml_set_f32_1d (const struct ggml_tensor * tensor ,int i ,float value ); 54 55GGML_BACKEND_API float ggml_get_f32_nd (const struct ggml_tensor * tensor ,int i0 ,int i1 ,int i2 ,int i3 ); 56GGML_BACKEND_API void ggml_set_f32_nd (const struct ggml_tensor * tensor ,int i0 ,int i1 ,int i2 ,int i3 ,float value ); 57 58GGML_BACKEND_API struct ggml_threadpool * ggml_threadpool_new (struct ggml_threadpool_params * params ); 59GGML_BACKEND_API void ggml_threadpool_free (struct ggml_threadpool * threadpool ); 60GGML_BACKEND_API int ggml_threadpool_get_n_threads (struct ggml_threadpool * threadpool ); 61GGML_BACKEND_API void ggml_threadpool_pause (struct ggml_threadpool * threadpool ); 62GGML_BACKEND_API void ggml_threadpool_resume (struct ggml_threadpool * threadpool ); 63 64// ggml_graph_plan() has to be called before ggml_graph_compute() 65// when plan.work_size > 0, caller must allocate memory for plan.work_data 66GGML_BACKEND_API struct ggml_cplan ggml_graph_plan ( 67const struct ggml_cgraph * cgraph , 68int n_threads ,/* = GGML_DEFAULT_N_THREADS */ 69struct ggml_threadpool * threadpool /* = NULL */ ); 70GGML_BACKEND_API enum ggml_status ggml_graph_compute (struct ggml_cgraph * cgraph ,struct ggml_cplan * cplan ); 71 72// same as ggml_graph_compute() but the work data is allocated as a part of the context 73// note: the drawback of this API is that you must have ensured that the context has enough memory for the work data 74GGML_BACKEND_API enum ggml_status ggml_graph_compute_with_ctx (struct ggml_context * ctx ,struct ggml_cgraph * cgraph ,int n_threads ); 75 76// 77// system info 78// 79 80// x86 81GGML_BACKEND_API int ggml_cpu_has_sse3 (void ); 82GGML_BACKEND_API int ggml_cpu_has_ssse3 (void ); 83GGML_BACKEND_API int ggml_cpu_has_avx (void ); 84GGML_BACKEND_API int ggml_cpu_has_avx_vnni (void ); 85GGML_BACKEND_API int ggml_cpu_has_avx2 (void ); 86GGML_BACKEND_API int ggml_cpu_has_bmi2 (void ); 87GGML_BACKEND_API int ggml_cpu_has_f16c (void ); 88GGML_BACKEND_API int ggml_cpu_has_fma (void ); 89GGML_BACKEND_API int ggml_cpu_has_avx512 (void ); 90GGML_BACKEND_API int ggml_cpu_has_avx512_vbmi (void ); 91GGML_BACKEND_API int ggml_cpu_has_avx512_vnni (void ); 92GGML_BACKEND_API int ggml_cpu_has_avx512_bf16 (void ); 93GGML_BACKEND_API int ggml_cpu_has_amx_int8 (void ); 94// ARM 95GGML_BACKEND_API int ggml_cpu_has_neon (void ); 96GGML_BACKEND_API int ggml_cpu_has_arm_fma (void ); 97GGML_BACKEND_API int ggml_cpu_has_fp16_va (void ); 98GGML_BACKEND_API int ggml_cpu_has_dotprod (void ); 99GGML_BACKEND_API int ggml_cpu_has_matmul_int8 (void ); 100GGML_BACKEND_API int ggml_cpu_has_sve (void ); 101GGML_BACKEND_API int ggml_cpu_get_sve_cnt (void );// sve vector length in bytes 102GGML_BACKEND_API int ggml_cpu_has_sme (void ); 103GGML_BACKEND_API int ggml_cpu_has_sme2 (void ); 104// other 105GGML_BACKEND_API int ggml_cpu_has_riscv_v (void ); 106GGML_BACKEND_API int ggml_cpu_get_rvv_vlen (void );// risc-v vector length in bytes 107GGML_BACKEND_API int ggml_cpu_has_vsx (void ); 108GGML_BACKEND_API int ggml_cpu_has_vxe (void ); 109GGML_BACKEND_API int ggml_cpu_has_wasm_simd (void ); 110GGML_BACKEND_API int ggml_cpu_has_llamafile (void ); 111 112// Internal types and functions exposed for tests and benchmarks 113 114typedef void (* ggml_vec_dot_t ) (int n ,float * GGML_RESTRICT s ,size_t bs ,const void * GGML_RESTRICT x ,size_t bx , 115const void * GGML_RESTRICT y ,size_t by ,int nrc ); 116 117struct ggml_type_traits_cpu { 118ggml_from_float_t from_float ; 119ggml_vec_dot_t vec_dot ; 120enum ggml_type vec_dot_type ; 121int64_t nrows ;// number of rows to process simultaneously 122 }; 123 124GGML_BACKEND_API const struct ggml_type_traits_cpu * ggml_get_type_traits_cpu (enum ggml_type type ); 125 126GGML_BACKEND_API void ggml_cpu_init (void ); 127 128// 129// CPU backend 130// 131 132GGML_BACKEND_API ggml_backend_t ggml_backend_cpu_init (void ); 133 134GGML_BACKEND_API bool ggml_backend_is_cpu (ggml_backend_t backend ); 135GGML_BACKEND_API void ggml_backend_cpu_set_n_threads (ggml_backend_t backend_cpu ,int n_threads ); 136GGML_BACKEND_API void ggml_backend_cpu_set_threadpool (ggml_backend_t backend_cpu ,ggml_threadpool_t threadpool ); 137GGML_BACKEND_API void ggml_backend_cpu_set_abort_callback (ggml_backend_t backend_cpu ,ggml_abort_callback abort_callback ,void * abort_callback_data ); 138 139GGML_BACKEND_API void ggml_backend_cpu_set_use_ref (ggml_backend_t backend_cpu ,bool use_ref ); 140 141GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cpu_reg (void ); 142 143GGML_BACKEND_API void ggml_cpu_fp32_to_fp32 (const float * ,float * ,int64_t ); 144GGML_BACKEND_API void ggml_cpu_fp32_to_i32 (const float * ,int32_t * ,int64_t ); 145GGML_BACKEND_API void ggml_cpu_fp32_to_fp16 (const float * ,ggml_fp16_t * ,int64_t ); 146GGML_BACKEND_API void ggml_cpu_fp16_to_fp32 (const ggml_fp16_t * ,float * ,int64_t ); 147GGML_BACKEND_API void ggml_cpu_fp32_to_bf16 (const float * ,ggml_bf16_t * ,int64_t ); 148GGML_BACKEND_API void ggml_cpu_bf16_to_fp32 (const ggml_bf16_t * ,float * ,int64_t ); 149 150#ifdef __cplusplus 151} 152#endif