gglm核心函数
struct ggml_init_params {
// memory pool
size_t mem_size; // bytes
void * mem_buffer; // if NULL, memory will be allocated internally
bool no_alloc; // don't allocate memory for the tensor data
}; // 初始化参数,可以传入内存大小或者直接传入内存指针
struct ggml_context * ggml_init(struct ggml_init_params params)
// 作用,传入初始需要的内存大小,返回一个ggml ctx结构体
struct ggml_context {
size_t mem_size;
void * mem_buffer;
bool mem_buffer_owned;
bool no_alloc;
int n_objects;
struct ggml_object * objects_begin;
struct ggml_object * objects_end;
};
// 作用: 存储张量的具体结构体,其中memSize指示memBuffer的长度
// memBuffer 的存储结构是 ggml_object ggml_tensor (data) ggml_object ggml_tensor (data)
// objectsBegin 指向第一个 objectsEnd指向最后一个
struct ggml_tensor * ggml_new_tensor(
struct ggml_context * ctx,
enum ggml_type type,
int n_dims,
const int64_t * ne)
// 在ggmlContext中创建一个新张量,并且将最终指针指向这个张量
struct ggml_tensor {
enum ggml_type type;
struct ggml_backend_buffer * buffer;
int64_t ne[GGML_MAX_DIMS]; // number of elements
size_t nb[GGML_MAX_DIMS]; // stride in bytes:
// nb[0] = ggml_type_size(type)
// nb[1] = nb[0] * (ne[0] / ggml_blck_size(type)) + padding
// nb[i] = nb[i-1] * ne[i-1]
// compute data
enum ggml_op op;
// op params - allocated as int32_t for alignment
int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)];
int32_t flags;
struct ggml_tensor * src[GGML_MAX_SRC];
// source tensor and offset for views
struct ggml_tensor * view_src;
size_t view_offs;
void * data;
char name[GGML_MAX_NAME];
void * extra; // extra things e.g. for ggml-cuda.cu
char padding[8];
};
// ggmlType表示当前张量的种类
// ne表示当前张量的维度
// nb[i]表示前往i维度需要偏移的字节数量
// op 表示这个张量由什么操作而来
// src表示由操作而来的原向量, 如 a + b = c, c此时的 src 指向 a 和 b
// view_src表示视图的内存来源
// view_off 表示视图的偏移量
// data 指向实际存储的数据
struct ggml_object {
size_t offs;
size_t size;
struct ggml_object * next;
enum ggml_object_type type;
char padding[4];
};
// off 表示 此object占 ctx中的buffer的偏移量
// size 表示 数据大小(包含填充)
// next表示下一个object

Comments NOTHING