Skip to content

Commit 3df2f6d

Browse files
committed
ggml : add GGML_NO_REALLOC option to disable reallocations in ggml-alloc
Enabled in ggml-ci for testing.
1 parent 9b17d74 commit 3df2f6d

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

ci/run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ sd=`dirname $0`
4545
cd $sd/../
4646
SRC=`pwd`
4747

48-
CMAKE_EXTRA="-DLLAMA_FATAL_WARNINGS=ON -DLLAMA_CURL=ON"
48+
CMAKE_EXTRA="-DLLAMA_FATAL_WARNINGS=ON -DLLAMA_CURL=ON -DGGML_NO_REALLOC=ON"
4949

5050
if [ ! -z ${GG_BUILD_METAL} ]; then
5151
CMAKE_EXTRA="${CMAKE_EXTRA} -DGGML_METAL=ON"

ggml/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ endif()
182182
# ggml core
183183
set(GGML_SCHED_MAX_COPIES "4" CACHE STRING "ggml: max input copies for pipeline parallelism")
184184
option(GGML_CPU "ggml: enable CPU backend" ON)
185+
option(GGML_NO_REALLOC "ggml: disallow reallocations in ggml-alloc (for debugging)" OFF)
185186

186187
# 3rd party libs / backends
187188
option(GGML_ACCELERATE "ggml: enable Accelerate framework" ON)

ggml/src/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,10 @@ if (GGML_BACKEND_DL)
221221
target_compile_definitions(ggml-base PUBLIC GGML_BACKEND_DL)
222222
endif()
223223

224+
if (GGML_NO_REALLOC)
225+
target_compile_definitions(ggml-base PUBLIC GGML_NO_REALLOC)
226+
endif()
227+
224228
add_library(ggml
225229
ggml-backend-reg.cpp)
226230
add_library(ggml::ggml ALIAS ggml)

ggml/src/ggml-alloc.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,17 @@ bool ggml_gallocr_reserve_n(ggml_gallocr_t galloc, struct ggml_cgraph * graph, c
922922
if (realloc) {
923923
#ifndef NDEBUG
924924
size_t cur_size = galloc->buffers[i] ? ggml_vbuffer_size(galloc->buffers[i]) : 0;
925-
GGML_LOG_DEBUG("%s: reallocating %s buffer from size %.02f MiB to %.02f MiB\n", __func__, ggml_backend_buft_name(galloc->bufts[i]), cur_size / 1024.0 / 1024.0, new_size / 1024.0 / 1024.0);
925+
GGML_LOG_DEBUG("%s: reallocating %s buffer from size %.02f MiB to %.02f MiB\n",
926+
__func__, ggml_backend_buft_name(galloc->bufts[i]),
927+
cur_size / 1024.0 / 1024.0, new_size / 1024.0 / 1024.0);
928+
#endif
929+
930+
#ifdef GGML_NO_REALLOC
931+
if (galloc->buffers[i] != NULL || new_size > cur_size) {
932+
GGML_ABORT("%s: reallocating %s buffer from size %.02f MiB to %.02f MiB not allowed with GGML_NO_REALLOC\n",
933+
__func__, ggml_backend_buft_name(galloc->bufts[i]),
934+
cur_size / 1024.0 / 1024.0, new_size / 1024.0 / 1024.0);
935+
}
926936
#endif
927937

928938
ggml_vbuffer_free(galloc->buffers[i]);

0 commit comments

Comments
 (0)