From 7949dcaaf7fc66026151614e13e7dc1ed638b7bd Mon Sep 17 00:00:00 2001 From: slaren Date: Wed, 26 Jul 2023 12:49:18 +0200 Subject: [PATCH] add GGML_PAD --- ggml.c | 9 ++++----- ggml.h | 1 + 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ggml.c b/ggml.c index 7677360b3..afe065610 100644 --- a/ggml.c +++ b/ggml.c @@ -4383,7 +4383,8 @@ struct ggml_context * ggml_init(struct ggml_init_params params) { return NULL; } - const size_t mem_size = (params.mem_size + GGML_MEM_ALIGN - 1) & ~(GGML_MEM_ALIGN - 1); + // REVIEW: this was probably a bug - the size was always padded even if the user provided the buffer + const size_t mem_size = params.mem_buffer ? params.mem_size : GGML_PAD(params.mem_size, GGML_MEM_ALIGN); *ctx = (struct ggml_context) { /*.mem_size =*/ mem_size, @@ -4519,10 +4520,8 @@ static struct ggml_object * ggml_new_object(struct ggml_context * ctx, enum ggml const size_t cur_size = obj_cur == NULL ? 0 : obj_cur->size; const size_t cur_end = cur_offs + cur_size; - size_t size_needed = size; - // align to GGML_MEM_ALIGN - size_needed = ((size_needed + GGML_MEM_ALIGN - 1)/GGML_MEM_ALIGN)*GGML_MEM_ALIGN; + size_t size_needed = GGML_PAD(size, GGML_MEM_ALIGN); char * const mem_buffer = ctx->mem_buffer; struct ggml_object * const obj_new = (struct ggml_object *)(mem_buffer + cur_end); @@ -15858,7 +15857,7 @@ struct ggml_cgraph * ggml_build_forward_ctx(struct ggml_context * ctx, struct gg } size_t ggml_graph_overhead(void) { - return GGML_OBJECT_SIZE + ((GGML_GRAPH_SIZE + GGML_MEM_ALIGN - 1)/GGML_MEM_ALIGN)*GGML_MEM_ALIGN; + return GGML_OBJECT_SIZE + GGML_PAD(GGML_GRAPH_SIZE, GGML_MEM_ALIGN); } // diff --git a/ggml.h b/ggml.h index 98ca6bac6..9919cce7c 100644 --- a/ggml.h +++ b/ggml.h @@ -208,6 +208,7 @@ #define GGML_UNUSED(x) (void)(x) +#define GGML_PAD(x, n) (((x) + (n) - 1) & ~((n) - 1)) #define GGML_ASSERT(x) \ do { \