Team Ai
Apppublic

KBaba7/llama.cpp

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
ggml-cpu.h136 linesDownload Raw Back to include
1#pragma once2 3#include "ggml.h"4#include "ggml-backend.h"5 6#ifdef  __cplusplus7extern "C" {8#endif9 10    // the compute plan that needs to be prepared for ggml_graph_compute()11    // since https://github.com/ggerganov/ggml/issues/28712    struct ggml_cplan {13        size_t    work_size; // size of work buffer, calculated by `ggml_graph_plan()`14        uint8_t * work_data; // work buffer, to be allocated by caller before calling to `ggml_graph_compute()`15 16        int n_threads;17        struct ggml_threadpool * threadpool;18 19        // abort ggml_graph_compute when true20        ggml_abort_callback abort_callback;21        void *              abort_callback_data;22    };23 24    // numa strategies25    enum ggml_numa_strategy {26        GGML_NUMA_STRATEGY_DISABLED   = 0,27        GGML_NUMA_STRATEGY_DISTRIBUTE = 1,28        GGML_NUMA_STRATEGY_ISOLATE    = 2,29        GGML_NUMA_STRATEGY_NUMACTL    = 3,30        GGML_NUMA_STRATEGY_MIRROR     = 4,31        GGML_NUMA_STRATEGY_COUNT32    };33 34    GGML_BACKEND_API void    ggml_numa_init(enum ggml_numa_strategy numa); // call once for better performance on NUMA systems35    GGML_BACKEND_API bool    ggml_is_numa(void); // true if init detected that system has >1 NUMA node36 37    GGML_BACKEND_API struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value);38    GGML_BACKEND_API struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value);39 40    GGML_BACKEND_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value);41    GGML_BACKEND_API struct ggml_tensor * ggml_set_f32 (struct ggml_tensor * tensor, float value);42 43    GGML_BACKEND_API int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i);44    GGML_BACKEND_API void    ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value);45 46    GGML_BACKEND_API int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3);47    GGML_BACKEND_API void    ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value);48 49    GGML_BACKEND_API float   ggml_get_f32_1d(const struct ggml_tensor * tensor, int i);50    GGML_BACKEND_API void    ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value);51 52    GGML_BACKEND_API float   ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3);53    GGML_BACKEND_API void    ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value);54 55    GGML_BACKEND_API struct ggml_threadpool *      ggml_threadpool_new           (struct ggml_threadpool_params  * params);56    GGML_BACKEND_API void                          ggml_threadpool_free          (struct ggml_threadpool * threadpool);57    GGML_BACKEND_API int                           ggml_threadpool_get_n_threads (struct ggml_threadpool * threadpool);58    GGML_BACKEND_API void                          ggml_threadpool_pause         (struct ggml_threadpool * threadpool);59    GGML_BACKEND_API void                          ggml_threadpool_resume        (struct ggml_threadpool * threadpool);60 61    // ggml_graph_plan() has to be called before ggml_graph_compute()62    // when plan.work_size > 0, caller must allocate memory for plan.work_data63    GGML_BACKEND_API struct ggml_cplan ggml_graph_plan(64                  const struct ggml_cgraph * cgraph,65                                       int   n_threads, /* = GGML_DEFAULT_N_THREADS */66                    struct ggml_threadpool * threadpool /* = NULL */ );67    GGML_BACKEND_API enum ggml_status  ggml_graph_compute(struct ggml_cgraph * cgraph, struct ggml_cplan * cplan);68 69    // same as ggml_graph_compute() but the work data is allocated as a part of the context70    // note: the drawback of this API is that you must have ensured that the context has enough memory for the work data71    GGML_BACKEND_API enum ggml_status  ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads);72 73    //74    // system info75    //76 77    // x8678    GGML_BACKEND_API int ggml_cpu_has_sse3       (void);79    GGML_BACKEND_API int ggml_cpu_has_ssse3      (void);80    GGML_BACKEND_API int ggml_cpu_has_avx        (void);81    GGML_BACKEND_API int ggml_cpu_has_avx_vnni   (void);82    GGML_BACKEND_API int ggml_cpu_has_avx2       (void);83    GGML_BACKEND_API int ggml_cpu_has_f16c       (void);84    GGML_BACKEND_API int ggml_cpu_has_fma        (void);85    GGML_BACKEND_API int ggml_cpu_has_avx512     (void);86    GGML_BACKEND_API int ggml_cpu_has_avx512_vbmi(void);87    GGML_BACKEND_API int ggml_cpu_has_avx512_vnni(void);88    GGML_BACKEND_API int ggml_cpu_has_avx512_bf16(void);89    GGML_BACKEND_API int ggml_cpu_has_amx_int8   (void);90    // ARM91    GGML_BACKEND_API int ggml_cpu_has_neon       (void);92    GGML_BACKEND_API int ggml_cpu_has_arm_fma    (void);93    GGML_BACKEND_API int ggml_cpu_has_fp16_va    (void);94    GGML_BACKEND_API int ggml_cpu_has_dotprod    (void);95    GGML_BACKEND_API int ggml_cpu_has_matmul_int8(void);96    GGML_BACKEND_API int ggml_cpu_has_sve        (void);97    GGML_BACKEND_API int ggml_cpu_get_sve_cnt    (void);  // sve vector length in bytes98    // other99    GGML_BACKEND_API int ggml_cpu_has_riscv_v    (void);100    GGML_BACKEND_API int ggml_cpu_has_vsx        (void);101    GGML_BACKEND_API int ggml_cpu_has_wasm_simd  (void);102    GGML_BACKEND_API int ggml_cpu_has_llamafile  (void);103 104    // Internal types and functions exposed for tests and benchmarks105 106    typedef void (*ggml_vec_dot_t)  (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT x, size_t bx,107                                       const void * GGML_RESTRICT y, size_t by, int nrc);108 109    struct ggml_type_traits_cpu {110        ggml_from_float_t        from_float;111        ggml_vec_dot_t           vec_dot;112        enum ggml_type           vec_dot_type;113        int64_t                  nrows; // number of rows to process simultaneously114    };115 116    GGML_BACKEND_API const struct ggml_type_traits_cpu * ggml_get_type_traits_cpu(enum ggml_type type);117 118    GGML_BACKEND_API void ggml_cpu_init(void);119 120    //121    // CPU backend122    //123 124    GGML_BACKEND_API ggml_backend_t ggml_backend_cpu_init(void);125 126    GGML_BACKEND_API bool ggml_backend_is_cpu                (ggml_backend_t backend);127    GGML_BACKEND_API void ggml_backend_cpu_set_n_threads     (ggml_backend_t backend_cpu, int n_threads);128    GGML_BACKEND_API void ggml_backend_cpu_set_threadpool    (ggml_backend_t backend_cpu, ggml_threadpool_t threadpool);129    GGML_BACKEND_API void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data);130 131    GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cpu_reg(void);132 133#ifdef __cplusplus134}135#endif136