@@ -18388,6 +18388,8 @@ static bool gguf_fread_str(void * dst, FILE * file, size_t * offset) {
18388
18388
}
18389
18389
18390
18390
struct gguf_context * gguf_init(const char * fname, struct gguf_init_params params) {
18391
+ GGML_ASSERT(!params.load || params.malloc || params.ctx != NULL);
18392
+
18391
18393
FILE * file = fopen(fname, "rb");
18392
18394
if (!file) {
18393
18395
return NULL;
@@ -18518,8 +18520,7 @@ struct gguf_context * gguf_init(const char * fname, struct gguf_init_params para
18518
18520
18519
18521
const size_t size_cur = (ne*ggml_type_size(info->type))/ggml_blck_size(info->type);
18520
18522
18521
- // TODO: pad size_cur to alignment
18522
- ctx->size_data += size_cur;
18523
+ ctx->size_data += GGML_PAD(size_cur, ctx->alignment);
18523
18524
}
18524
18525
18525
18526
// TODO: simplify
@@ -18528,28 +18529,18 @@ struct gguf_context * gguf_init(const char * fname, struct gguf_init_params para
18528
18529
ctx->data = GGML_ALIGNED_MALLOC(ctx->size_data);
18529
18530
fseek(file, ctx->offset, SEEK_SET);
18530
18531
ok = ok && gguf_fread_el(ctx->data, ctx->size_data, file, &offset);
18531
- } else if (params.ctx != NULL) {
18532
- bool ctx_new = false;
18533
- bool ctx_no_alloc = false;
18534
-
18535
- if (*params.ctx == NULL) {
18536
- const size_t mem_size =
18537
- ctx->header.n_tensors*ggml_tensor_overhead() + 1 +
18538
- ctx->size_data;
18539
-
18540
- struct ggml_init_params pdata = {
18541
- .mem_size = mem_size,
18542
- .mem_buffer = NULL,
18543
- .no_alloc = false,
18544
- };
18532
+ } else {
18533
+ const size_t mem_size =
18534
+ ctx->header.n_tensors*ggml_tensor_overhead() + 1 +
18535
+ ctx->size_data;
18545
18536
18546
- *params.ctx = ggml_init(pdata);
18537
+ struct ggml_init_params pdata = {
18538
+ .mem_size = mem_size,
18539
+ .mem_buffer = NULL,
18540
+ .no_alloc = false,
18541
+ };
18547
18542
18548
- ctx_new = true;
18549
- } else {
18550
- ctx_no_alloc = ggml_get_no_alloc(*params.ctx);
18551
- ggml_set_no_alloc(*params.ctx, false);
18552
- }
18543
+ *params.ctx = ggml_init(pdata);
18553
18544
18554
18545
struct ggml_context * ctx_data = *params.ctx;
18555
18546
@@ -18561,11 +18552,7 @@ struct gguf_context * gguf_init(const char * fname, struct gguf_init_params para
18561
18552
if (!ok) {
18562
18553
fprintf(stderr, "%s: failed to read tensor data\n", __func__);
18563
18554
fclose(file);
18564
- if (ctx_new) {
18565
- ggml_free(ctx_data);
18566
- } else {
18567
- ggml_set_no_alloc(ctx_data, ctx_no_alloc);
18568
- }
18555
+ ggml_free(ctx_data);
18569
18556
gguf_free(ctx);
18570
18557
return NULL;
18571
18558
}
@@ -18597,18 +18584,12 @@ struct gguf_context * gguf_init(const char * fname, struct gguf_init_params para
18597
18584
if (!ok) {
18598
18585
fprintf(stderr, "%s: failed to create tensors\n", __func__);
18599
18586
fclose(file);
18600
- if (ctx_new) {
18601
- ggml_free(ctx_data);
18602
- } else {
18603
- ggml_set_no_alloc(ctx_data, ctx_no_alloc);
18604
- }
18587
+ ggml_free(ctx_data);
18605
18588
gguf_free(ctx);
18606
18589
return NULL;
18607
18590
}
18608
18591
18609
- ggml_set_no_alloc(ctx_data, ctx_no_alloc);
18610
- } else {
18611
- GGML_ASSERT("gguf: invalid params - load requires malloc or ctx");
18592
+ ggml_set_no_alloc(ctx_data, false);
18612
18593
}
18613
18594
}
18614
18595
0 commit comments