Skip to content

Commit 5d5cb4c

Browse files
ggml-meta: propagate buffer usage and call init on the new tensors (ggml-org#27586)
1 parent d222767 commit 5d5cb4c

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

‎ggml/src/ggml-backend-impl.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ extern "C" {
8383
GGML_API ggml_backend_buffer_t ggml_backend_multi_buffer_alloc_buffer(ggml_backend_buffer_t * buffers, size_t n_buffers);
8484
GGML_API bool ggml_backend_buffer_is_multi_buffer(ggml_backend_buffer_t buffer);
8585
GGML_API void ggml_backend_multi_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage);
86+
GGML_API void ggml_backend_meta_buffer_set_usage (ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage);
8687

8788
//
8889
// Backend (meta)

‎ggml/src/ggml-backend-meta.cpp‎

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,7 +1168,6 @@ static struct ggml_backend_meta_split_state ggml_backend_meta_get_split_state(
11681168
}
11691169

11701170
static struct ggml_backend_meta_split_state ggml_backend_meta_get_split_state(const struct ggml_tensor * tensor, bool assume_sync) {
1171-
GGML_ASSERT(ggml_backend_buffer_is_meta(tensor->buffer));
11721171
ggml_backend_meta_buffer_context * buf_ctx = (ggml_backend_meta_buffer_context *) tensor->buffer->context;
11731172
return ggml_backend_meta_get_split_state(buf_ctx->get_simple_tensor_container(tensor), tensor, assume_sync);
11741173
}
@@ -1259,7 +1258,14 @@ static enum ggml_status ggml_backend_meta_buffer_init_tensor_impl(ggml_backend_m
12591258
t_ij->data = (char *) ggml_backend_buffer_get_base(simple_buf)
12601259
+ size_t(tensor->data) - size_t(ggml_backend_buffer_get_base(tensor->buffer));
12611260
}
1262-
t_ij->extra = tensor->extra;
1261+
1262+
if (simple_buf) {
1263+
// the backend that owns the buffer will set .extra
1264+
ggml_backend_buffer_init_tensor(simple_buf, t_ij);
1265+
} else {
1266+
t_ij->extra = tensor->extra;
1267+
}
1268+
12631269
for (int i = 0; i < GGML_MAX_SRC; i++) {
12641270
t_ij->src[i] = tensor->src[i];
12651271
if (tensor->src[i] == tensor) {
@@ -1668,6 +1674,16 @@ bool ggml_backend_buffer_is_meta(ggml_backend_buffer_t buf) {
16681674
return buf != nullptr && buf->iface.free_buffer == ggml_backend_meta_buffer_iface.free_buffer;
16691675
}
16701676

1677+
void ggml_backend_meta_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage) {
1678+
GGML_ASSERT(ggml_backend_buffer_is_meta(buffer));
1679+
ggml_backend_meta_buffer_context * buf_ctx = (ggml_backend_meta_buffer_context *) buffer->context;
1680+
for (size_t i = 0; i < buf_ctx->bufs.size(); i++) {
1681+
if (buf_ctx->bufs[i]) {
1682+
ggml_backend_buffer_set_usage(buf_ctx->bufs[i].get(), usage);
1683+
}
1684+
}
1685+
}
1686+
16711687
static ggml_backend_buffer_t ggml_backend_meta_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
16721688
const size_t n_simple_bufts = ggml_backend_meta_buft_n_bufts(buft);
16731689

‎ggml/src/ggml-backend.cpp‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ void ggml_backend_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backe
182182
// FIXME: add a generic callback to the buffer interface
183183
if (ggml_backend_buffer_is_multi_buffer(buffer)) {
184184
ggml_backend_multi_buffer_set_usage(buffer, usage);
185+
} else if (ggml_backend_buffer_is_meta(buffer)) {
186+
ggml_backend_meta_buffer_set_usage(buffer, usage);
185187
}
186188
}
187189

0 commit comments

Comments
 (0)