From 905c94414326b78fefff1d326f5d654aae50e3d6 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 13 Sep 2023 11:39:09 +0300 Subject: [PATCH] ggml : use simpler ggml_bytes() implementation --- ggml.c | 44 +++++++++++--------------------------------- whisper.cpp | 2 ++ 2 files changed, 13 insertions(+), 33 deletions(-) diff --git a/ggml.c b/ggml.c index f1e847b1..c5b5dd65 100644 --- a/ggml.c +++ b/ggml.c @@ -4303,41 +4303,19 @@ int64_t ggml_nrows(const struct ggml_tensor * tensor) { } size_t ggml_nbytes(const struct ggml_tensor * tensor) { - // original: - //size_t nbytes = tensor->ne[0]*tensor->nb[0]/ggml_blck_size(tensor->type); - //for (int i = 1; i < GGML_MAX_DIMS; ++i) { - // nbytes += (tensor->ne[i] - 1)*tensor->nb[i]; - //} - //return nbytes; - - // TODO: the imlpementation below is stupid - need something better - - // sort ne and nb - int64_t sne[GGML_MAX_DIMS]; - size_t snb[GGML_MAX_DIMS]; - - for (int i = 0; i < GGML_MAX_DIMS; ++i) { - sne[i] = tensor->ne[i]; - snb[i] = tensor->nb[i]; - } - - for (int i = 0; i < GGML_MAX_DIMS; ++i) { - for (int j = i + 1; j < GGML_MAX_DIMS; ++j) { - if ((snb[i] > snb[j]) || (snb[i] == snb[j] && sne[i] < sne[j])) { - size_t tmp = snb[i]; - snb[i] = snb[j]; - snb[j] = tmp; - - int64_t tmp2 = sne[i]; - sne[i] = sne[j]; - sne[j] = tmp2; - } + size_t nbytes; + size_t blck_size = ggml_blck_size(tensor->type); + if (blck_size == 1) { + nbytes = ggml_type_size(tensor->type); + for (int i = 0; i < GGML_MAX_DIMS; ++i) { + nbytes += (tensor->ne[i] - 1)*tensor->nb[i]; } } - - size_t nbytes = (sne[0]/ggml_blck_size(tensor->type))*snb[0]; - for (int i = 1; i < GGML_MAX_DIMS; ++i) { - nbytes += (sne[i] - 1)*snb[i]; + else { + nbytes = tensor->ne[0]*tensor->nb[0]/blck_size; + for (int i = 1; i < GGML_MAX_DIMS; ++i) { + nbytes += (tensor->ne[i] - 1)*tensor->nb[i]; + } } return nbytes; diff --git a/whisper.cpp b/whisper.cpp index f9df9dfb..fc70bf95 100644 --- a/whisper.cpp +++ b/whisper.cpp @@ -1406,6 +1406,8 @@ static bool whisper_model_load(struct whisper_model_loader * loader, whisper_con } static bool whisper_encode_external(const whisper_state & wstate) { + GGML_UNUSED(wstate); + #ifndef WHISPER_USE_COREML const bool use_coreml = false; #else