Skip to content

Commit 70680c4

Browse files
ggml : upgrade init_tensor API to return a ggml_status (#11854)
* Upgrade init_tensor API to return a ggml_status To prepare for an 'abort-free' ggml (ggml not to abort on OOMs but return a OOM status), as agreeed with Diego in the ggml repo, upgrade the init_tensor() and view_init() APIs to return a ggml_status. * misc fixes --------- Co-authored-by: slaren <[email protected]>
1 parent c43a3e7 commit 70680c4

16 files changed

+125
-86
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ lcov-report/
4545
tags
4646
.build/
4747
build*
48+
release
49+
debug
4850
!build-info.cmake
4951
!build-info.cpp.in
5052
!build-info.sh

CONTRIBUTING.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
4040
_(NOTE: this guideline is yet to be applied to the `llama.cpp` codebase. New code should follow this guideline.)_
4141
42-
- Try to follow the existing patterns in the code (indentation, spaces, etc.). In case of doubt use `clang-format` to format the added code
42+
- Try to follow the existing patterns in the code (indentation, spaces, etc.). In case of doubt use `clang-format` (from clang-tools v15+) to format the added code
4343
- For anything not covered in the current guidelines, refer to the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)
4444
- Tensors store data in row-major order. We refer to dimension 0 as columns, 1 as rows, 2 as matrices
4545
- Matrix multiplication is unconventional: [`C = ggml_mul_mat(ctx, A, B)`](https://github.com/ggml-org/llama.cpp/blob/880e352277fc017df4d5794f0c21c44e1eae2b84/ggml.h#L1058-L1064) means $C^T = A B^T \Leftrightarrow C = B A^T.$

ggml/include/ggml-alloc.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ struct ggml_tallocr {
1919
};
2020

2121
GGML_API struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer);
22-
GGML_API void ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor);
22+
GGML_API enum ggml_status ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor);
2323

2424
// Graph allocator
2525
/*

ggml/include/ggml-backend.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ extern "C" {
5656
GGML_API void ggml_backend_buffer_free (ggml_backend_buffer_t buffer);
5757
GGML_API void * ggml_backend_buffer_get_base (ggml_backend_buffer_t buffer);
5858
GGML_API size_t ggml_backend_buffer_get_size (ggml_backend_buffer_t buffer);
59-
GGML_API void ggml_backend_buffer_init_tensor (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
59+
GGML_API enum ggml_status ggml_backend_buffer_init_tensor (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
6060
GGML_API size_t ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer);
6161
GGML_API size_t ggml_backend_buffer_get_max_size (ggml_backend_buffer_t buffer);
6262
GGML_API size_t ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
@@ -342,8 +342,8 @@ extern "C" {
342342
GGML_API bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data);
343343

344344
// Tensor initialization
345-
GGML_API void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr);
346-
GGML_API void ggml_backend_view_init(struct ggml_tensor * tensor);
345+
GGML_API enum ggml_status ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr);
346+
GGML_API enum ggml_status ggml_backend_view_init(struct ggml_tensor * tensor);
347347

348348
// CPU buffer types are always available
349349
GGML_API ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size);

ggml/src/ggml-alloc.c

+24-15
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer) {
8989
return talloc;
9090
}
9191

92-
void ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor) {
92+
enum ggml_status ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor) {
9393
size_t size = ggml_backend_buffer_get_alloc_size(talloc->buffer, tensor);
9494
size = GGML_PAD(size, talloc->alignment);
9595

@@ -104,7 +104,7 @@ void ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tenso
104104

105105
assert(((uintptr_t)addr % talloc->alignment) == 0);
106106

107-
ggml_backend_tensor_alloc(talloc->buffer, tensor, addr);
107+
return ggml_backend_tensor_alloc(talloc->buffer, tensor, addr);
108108
}
109109

110110
// dynamic tensor allocator
@@ -933,42 +933,51 @@ size_t ggml_gallocr_get_buffer_size(ggml_gallocr_t galloc, int buffer_id) {
933933

934934
// utils
935935

936+
static void free_buffers(ggml_backend_buffer_t ** buffers, const size_t * n_buffers) {
937+
for (size_t i = 0; i < *n_buffers; i++) {
938+
ggml_backend_buffer_free((*buffers)[i]);
939+
}
940+
free(*buffers);
941+
}
942+
936943
static bool alloc_tensor_range(struct ggml_context * ctx,
937944
struct ggml_tensor * first, struct ggml_tensor * last,
938945
ggml_backend_buffer_type_t buft, size_t size,
939946
ggml_backend_buffer_t ** buffers, size_t * n_buffers) {
947+
940948
ggml_backend_buffer_t buffer = ggml_backend_buft_alloc_buffer(buft, size);
941949
if (buffer == NULL) {
942-
#ifndef NDEBUG
943-
GGML_LOG_DEBUG("%s: failed to allocate %s buffer of size %zu\n", __func__, ggml_backend_buft_name(buft), size);
944-
#endif
945-
for (size_t i = 0; i < *n_buffers; i++) {
946-
ggml_backend_buffer_free((*buffers)[i]);
947-
}
948-
free(*buffers);
950+
GGML_LOG_ERROR("%s: failed to allocate %s buffer of size %zu\n", __func__, ggml_backend_buft_name(buft), size);
951+
free_buffers(buffers, n_buffers);
949952
return false;
950953
}
951954

955+
*buffers = realloc(*buffers, sizeof(ggml_backend_buffer_t) * (*n_buffers + 1));
956+
(*buffers)[(*n_buffers)++] = buffer;
957+
952958
struct ggml_tallocr tallocr = ggml_tallocr_new(buffer);
953959

954960
for (struct ggml_tensor * t = first; t != last; t = ggml_get_next_tensor(ctx, t)) {
961+
enum ggml_status status = GGML_STATUS_SUCCESS;
955962
if (t->data == NULL) {
956963
if (t->view_src == NULL) {
957-
ggml_tallocr_alloc(&tallocr, t);
964+
status = ggml_tallocr_alloc(&tallocr, t);
958965
} else if (t->buffer == NULL) {
959-
ggml_backend_view_init(t);
966+
status = ggml_backend_view_init(t);
960967
}
961968
} else {
962969
if (t->view_src != NULL && t->buffer == NULL) {
963970
// view of a pre-allocated tensor
964-
ggml_backend_view_init(t);
971+
status = ggml_backend_view_init(t);
965972
}
966973
}
974+
if (status != GGML_STATUS_SUCCESS) {
975+
GGML_LOG_ERROR("%s: failed to initialize tensor %s\n", __func__, t->name);
976+
free_buffers(buffers, n_buffers);
977+
return false;
978+
}
967979
}
968980

969-
*buffers = realloc(*buffers, sizeof(ggml_backend_buffer_t) * (*n_buffers + 1));
970-
(*buffers)[(*n_buffers)++] = buffer;
971-
972981
return true;
973982
}
974983

ggml/src/ggml-backend-impl.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ extern "C" {
4444
// base address of the buffer
4545
void * (*get_base) (ggml_backend_buffer_t buffer);
4646
// (optional) initialize a tensor in the buffer (eg. add tensor extras)
47-
void (*init_tensor) (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
47+
enum ggml_status (*init_tensor)(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
4848
// tensor data access
4949
void (*memset_tensor)(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, uint8_t value, size_t offset, size_t size);
5050
void (*set_tensor) (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);

ggml/src/ggml-backend.cpp

+9-8
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,12 @@ void * ggml_backend_buffer_get_base(ggml_backend_buffer_t buffer) {
126126
return base;
127127
}
128128

129-
void ggml_backend_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
129+
enum ggml_status ggml_backend_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
130130
// init_tensor is optional
131131
if (buffer->iface.init_tensor) {
132-
buffer->iface.init_tensor(buffer, tensor);
132+
return buffer->iface.init_tensor(buffer, tensor);
133133
}
134+
return GGML_STATUS_SUCCESS;
134135
}
135136

136137
void ggml_backend_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
@@ -1641,18 +1642,18 @@ ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched,
16411642

16421643
// utils
16431644

1644-
void ggml_backend_view_init(struct ggml_tensor * tensor) {
1645+
enum ggml_status ggml_backend_view_init(struct ggml_tensor * tensor) {
16451646
GGML_ASSERT(tensor->buffer == NULL);
16461647
GGML_ASSERT(tensor->view_src != NULL);
16471648
GGML_ASSERT(tensor->view_src->buffer != NULL);
16481649
GGML_ASSERT(tensor->view_src->data != NULL);
16491650

16501651
tensor->buffer = tensor->view_src->buffer;
16511652
tensor->data = (char *)tensor->view_src->data + tensor->view_offs;
1652-
ggml_backend_buffer_init_tensor(tensor->buffer, tensor);
1653+
return ggml_backend_buffer_init_tensor(tensor->buffer, tensor);
16531654
}
16541655

1655-
void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr) {
1656+
enum ggml_status ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr) {
16561657
GGML_ASSERT(tensor->buffer == NULL);
16571658
GGML_ASSERT(tensor->data == NULL);
16581659
GGML_ASSERT(tensor->view_src == NULL);
@@ -1662,7 +1663,7 @@ void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor
16621663

16631664
tensor->buffer = buffer;
16641665
tensor->data = addr;
1665-
ggml_backend_buffer_init_tensor(buffer, tensor);
1666+
return ggml_backend_buffer_init_tensor(buffer, tensor);
16661667
}
16671668

16681669
static struct ggml_tensor * graph_copy_dup_tensor(struct ggml_hash_set hash_set, struct ggml_tensor ** node_copies,
@@ -1708,7 +1709,8 @@ static void graph_copy_init_tensor(struct ggml_hash_set * hash_set, struct ggml_
17081709
struct ggml_tensor * dst = node_copies[id];
17091710
if (dst->view_src != NULL) {
17101711
graph_copy_init_tensor(hash_set, node_copies, node_init, src->view_src);
1711-
ggml_backend_view_init(dst);
1712+
enum ggml_status status = ggml_backend_view_init(dst);
1713+
GGML_ASSERT(status == GGML_STATUS_SUCCESS);
17121714
}
17131715
else {
17141716
ggml_backend_tensor_copy(src, dst);
@@ -1823,7 +1825,6 @@ bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t
18231825
assert(g1->n_nodes == g2->n_nodes);
18241826

18251827
for (int i = 0; i < g1->n_nodes; i++) {
1826-
//printf("eval %d/%d\n", i, g1->n_nodes);
18271828
struct ggml_tensor * t1 = g1->nodes[i];
18281829
struct ggml_tensor * t2 = g2->nodes[i];
18291830

ggml/src/ggml-cann/ggml-cann.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -796,11 +796,11 @@ static bool need_transform(ggml_type type) {
796796
* @param buffer The CANN buffer from which to initialize the tensor.
797797
* @param tensor Pointer to the tensor to be initialized.
798798
*/
799-
static void ggml_backend_cann_buffer_init_tensor(
799+
static enum ggml_status ggml_backend_cann_buffer_init_tensor(
800800
ggml_backend_buffer_t buffer, ggml_tensor* tensor) {
801801
if (tensor->view_src != NULL && tensor->view_offs == 0) {
802802
GGML_ASSERT(tensor->view_src->buffer->buft == buffer->buft);
803-
return;
803+
return GGML_STATUS_SUCCESS;
804804
}
805805

806806
// TODO: can backend doesn't support quantized yet. Just leave the code
@@ -817,6 +817,7 @@ static void ggml_backend_cann_buffer_init_tensor(
817817
memset_size, 0, memset_size));
818818
}
819819
}
820+
return GGML_STATUS_SUCCESS;
820821
}
821822

822823
// TODO: need handle tensor which has paddings.

ggml/src/ggml-cpu/amx/amx.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ static void * ggml_backend_amx_buffer_get_base(ggml_backend_buffer_t buffer) {
5050
return (void *) (buffer->context);
5151
}
5252

53-
static void ggml_backend_amx_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
53+
static enum ggml_status ggml_backend_amx_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
5454
tensor->extra = (void *) ggml::cpu::amx::get_tensor_traits(buffer, tensor);
5555

5656
GGML_UNUSED(buffer);
57+
return GGML_STATUS_SUCCESS;
5758
}
5859

5960
static void ggml_backend_amx_buffer_memset_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor,

ggml/src/ggml-cpu/ggml-cpu-aarch64.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -4135,10 +4135,11 @@ static const ggml::cpu::tensor_traits * ggml_aarch64_get_optimal_repack_type(con
41354135
return nullptr;
41364136
}
41374137

4138-
static void ggml_backend_cpu_aarch64_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
4138+
static enum ggml_status ggml_backend_cpu_aarch64_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
41394139
tensor->extra = (void *) const_cast<ggml::cpu::tensor_traits *>(ggml_aarch64_get_optimal_repack_type(tensor));
41404140

41414141
GGML_UNUSED(buffer);
4142+
return GGML_STATUS_SUCCESS;
41424143
}
41434144

41444145
static void ggml_backend_cpu_aarch64_buffer_set_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor,

ggml/src/ggml-cuda/ggml-cuda.cu

+5-3
Original file line numberDiff line numberDiff line change
@@ -540,12 +540,12 @@ static void * ggml_backend_cuda_buffer_get_base(ggml_backend_buffer_t buffer) {
540540
return ctx->dev_ptr;
541541
}
542542

543-
static void ggml_backend_cuda_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
543+
static enum ggml_status ggml_backend_cuda_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
544544
ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
545545

546546
if (tensor->view_src != NULL) {
547547
assert(tensor->view_src->buffer->buft == buffer->buft);
548-
return;
548+
return GGML_STATUS_SUCCESS;
549549
}
550550

551551
if (ggml_is_quantized(tensor->type) && tensor->view_src == nullptr && ggml_backend_buffer_get_usage(buffer) != GGML_BACKEND_BUFFER_USAGE_COMPUTE) {
@@ -558,6 +558,7 @@ static void ggml_backend_cuda_buffer_init_tensor(ggml_backend_buffer_t buffer, g
558558
CUDA_CHECK(cudaMemset((char *)tensor->data + original_size, 0, padded_size - original_size));
559559
}
560560
}
561+
return GGML_STATUS_SUCCESS;
561562
}
562563

563564
static void ggml_backend_cuda_buffer_memset_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, uint8_t value, size_t offset, size_t size) {
@@ -792,7 +793,7 @@ static void * ggml_backend_cuda_split_buffer_get_base(ggml_backend_buffer_t buff
792793
GGML_UNUSED(buffer);
793794
}
794795

795-
static void ggml_backend_cuda_split_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
796+
static enum ggml_status ggml_backend_cuda_split_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
796797
GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported
797798

798799
ggml_backend_cuda_split_buffer_context * ctx = (ggml_backend_cuda_split_buffer_context *)buffer->context;
@@ -838,6 +839,7 @@ static void ggml_backend_cuda_split_buffer_init_tensor(ggml_backend_buffer_t buf
838839
}
839840
}
840841
tensor->extra = extra;
842+
return GGML_STATUS_SUCCESS;
841843
}
842844

843845
static void ggml_backend_cuda_split_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {

ggml/src/ggml-opencl/ggml-opencl.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -1211,7 +1211,7 @@ static void * ggml_backend_opencl_buffer_get_base(ggml_backend_buffer_t buffer)
12111211
GGML_UNUSED(buffer);
12121212
}
12131213

1214-
static void ggml_backend_opencl_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
1214+
static enum ggml_status ggml_backend_opencl_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
12151215
ggml_backend_opencl_buffer_context * ctx = (ggml_backend_opencl_buffer_context *) buffer->context;
12161216

12171217
ggml_cl2_init(buffer->buft->device);
@@ -1251,6 +1251,7 @@ static void ggml_backend_opencl_buffer_init_tensor(ggml_backend_buffer_t buffer,
12511251
tensor->extra = extra;
12521252
}
12531253
}
1254+
return GGML_STATUS_SUCCESS;
12541255
}
12551256

12561257
// The optimized gemm and gemv kernels are used for large matrices without batch.

ggml/src/ggml-rpc/ggml-rpc.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ static rpc_tensor serialize_tensor(const ggml_tensor * tensor) {
464464
return result;
465465
}
466466

467-
static void ggml_backend_rpc_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
467+
static enum ggml_status ggml_backend_rpc_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
468468
ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
469469

470470
// CUDA backend on the server pads everything to 512 due to CUDA limitations.
@@ -478,6 +478,7 @@ static void ggml_backend_rpc_buffer_init_tensor(ggml_backend_buffer_t buffer, gg
478478
bool status = send_rpc_cmd(ctx->sock, RPC_CMD_INIT_TENSOR, &request, sizeof(request), nullptr, 0);
479479
GGML_ASSERT(status);
480480
}
481+
return GGML_STATUS_SUCCESS;
481482
}
482483

483484
static void ggml_backend_rpc_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {

ggml/src/ggml-sycl/ggml-sycl.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -323,14 +323,14 @@ static void * ggml_backend_sycl_buffer_get_base(ggml_backend_buffer_t buffer) {
323323
return ctx->dev_ptr;
324324
}
325325

326-
static void
326+
static enum ggml_status
327327
ggml_backend_sycl_buffer_init_tensor(ggml_backend_buffer_t buffer,
328328
ggml_tensor *tensor) try {
329329
ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *)buffer->context;
330330

331331
if (tensor->view_src != NULL) {
332332
assert(tensor->view_src->buffer->buft == buffer->buft);
333-
return;
333+
return GGML_STATUS_SUCCESS;
334334
}
335335

336336
ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu{};
@@ -348,6 +348,7 @@ ggml_backend_sycl_buffer_init_tensor(ggml_backend_buffer_t buffer,
348348
padded_size - original_size).wait()));
349349
}
350350
}
351+
return GGML_STATUS_SUCCESS;
351352
}
352353
catch (sycl::exception const &exc) {
353354
std::cerr << exc.what() << "Exception caught at file:" << __FILE__
@@ -729,7 +730,7 @@ static void * ggml_backend_sycl_split_buffer_get_base(ggml_backend_buffer_t buff
729730
GGML_UNUSED(buffer);
730731
}
731732

732-
static void
733+
static enum ggml_status
733734
ggml_backend_sycl_split_buffer_init_tensor(ggml_backend_buffer_t buffer,
734735
ggml_tensor *tensor) try {
735736
GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported
@@ -804,6 +805,7 @@ ggml_backend_sycl_split_buffer_init_tensor(ggml_backend_buffer_t buffer,
804805
}
805806
}
806807
tensor->extra = extra;
808+
return GGML_STATUS_SUCCESS;
807809
}
808810
catch (sycl::exception const &exc) {
809811
std::cerr << exc.what() << "Exception caught at file:" << __FILE__

ggml/src/ggml-vulkan/ggml-vulkan.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -7923,11 +7923,12 @@ static void * ggml_backend_vk_buffer_get_base(ggml_backend_buffer_t buffer) {
79237923
UNUSED(buffer);
79247924
}
79257925

7926-
static void ggml_backend_vk_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
7926+
static enum ggml_status ggml_backend_vk_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
79277927
VK_LOG_DEBUG("ggml_backend_vk_buffer_init_tensor(" << buffer << " (" << buffer->context << "), " << tensor << ")");
79287928
if (tensor->view_src != nullptr) {
79297929
GGML_ASSERT(tensor->view_src->buffer->buft == buffer->buft);
79307930
}
7931+
return GGML_STATUS_SUCCESS;
79317932
}
79327933

79337934
static void ggml_backend_vk_buffer_memset_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, uint8_t value, size_t offset, size_t size) {

0 commit comments

Comments
 (0)