From bf285e0abbe878f888fcf63408413b6f96dc663e Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sat, 6 Sep 2025 19:10:16 +0800 Subject: [PATCH] Revert "ggml-zdnn: trying to fix set_tensors without needing additional if guard" This reverts commit 6e780a412bf27442d93acc4ffb6db2df622902f4. Signed-off-by: Aaron Teo --- ggml/src/ggml-zdnn/ggml-zdnn-impl.h | 3 --- ggml/src/ggml-zdnn/ggml-zdnn.cpp | 25 ++++++++----------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/ggml/src/ggml-zdnn/ggml-zdnn-impl.h b/ggml/src/ggml-zdnn/ggml-zdnn-impl.h index 8d05cf44c8..9dcb040fa8 100644 --- a/ggml/src/ggml-zdnn/ggml-zdnn-impl.h +++ b/ggml/src/ggml-zdnn/ggml-zdnn-impl.h @@ -8,7 +8,6 @@ #include #include #include -#include // for std::atomic #define GGML_ZDNN_NAME "zDNN" #define GGML_ZDNN_VERSION ZDNN_VERNUM @@ -78,14 +77,12 @@ struct ggml_backend_zdnn_context { struct ggml_backend_zdnn_buffer { void * data; size_t size; - std::atomic bytes_written; zdnn_tensor_desc pre_tfm_desc; zdnn_tensor_desc tfm_desc; zdnn_ztensor ztensor; char name[GGML_MAX_NAME]; - std::atomic transformed_once; }; struct ggml_backend_zdnn_buffer_context { diff --git a/ggml/src/ggml-zdnn/ggml-zdnn.cpp b/ggml/src/ggml-zdnn/ggml-zdnn.cpp index 95a23793dd..335eab9298 100644 --- a/ggml/src/ggml-zdnn/ggml-zdnn.cpp +++ b/ggml/src/ggml-zdnn/ggml-zdnn.cpp @@ -387,23 +387,20 @@ static void * ggml_backend_zdnn_buffer_get_base(ggml_backend_buffer_t buffer) { return ctx->all_data; } -static ggml_status ggml_backend_zdnn_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) { - if (tensor->view_src != nullptr) { +static enum ggml_status ggml_backend_zdnn_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) { + if (tensor->view_src != NULL) { assert(tensor->view_src->buffer->buft == buffer->buft); - tensor->extra = tensor->view_src->extra; return GGML_STATUS_SUCCESS; } ggml_backend_zdnn_buffer_context * ctx = (ggml_backend_zdnn_buffer_context *)buffer->context; - const size_t tsize = ggml_nbytes(tensor); + const int64_t tsize = ggml_nbytes(tensor); int buffer_idx = ctx->n_buffers; std::unique_ptr zdnn_buffer = std::make_unique(); zdnn_buffer->data = tensor->data; zdnn_buffer->size = tsize; - zdnn_buffer->bytes_written.store(0, std::memory_order_relaxed); - zdnn_buffer->transformed_once.store(false, std::memory_order_relaxed); strncpy(zdnn_buffer->name, tensor->name, GGML_MAX_NAME - 1); ggml_zdnn_init_tensor(zdnn_buffer.get(), tensor); @@ -428,17 +425,11 @@ static void ggml_backend_zdnn_buffer_set_tensor(ggml_backend_buffer_t buffer, gg memcpy((char *)tensor->data + offset, data, size); ggml_backend_zdnn_buffer * extra = (ggml_backend_zdnn_buffer *)tensor->extra; - assert(offset + size <= extra->size); - - const size_t prev = extra->bytes_written.fetch_add(size, std::memory_order_acq_rel); - const bool is_complete = (prev + size == extra->size); - - if (is_complete) { - bool expected = false; - if (extra->transformed_once.compare_exchange_strong(expected, true, std::memory_order_acq_rel, std::memory_order_acquire)) { - if (extra->ztensor.is_transformed) zdnn_reset_ztensor(&extra->ztensor); - ggml_zdnn_load_tensor(extra->ztensor, tensor->data); - } + size_t total_size = ggml_nbytes(tensor); + // WARNING: this check might not be thread-safe. need to verify. + if (offset + size == total_size) { + if (extra->ztensor.is_transformed) zdnn_reset_ztensor(&extra->ztensor); + ggml_zdnn_load_tensor(extra->ztensor, tensor->data); } GGML_UNUSED(buffer);