@@ -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,7 +933,7 @@ 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 , size_t * n_buffers ) {
936+ static void free_buffers (ggml_backend_buffer_t * * buffers , const size_t * n_buffers ) {
937937 for (size_t i = 0 ; i < * n_buffers ; i ++ ) {
938938 ggml_backend_buffer_free ((* buffers )[i ]);
939939 }
@@ -947,47 +947,37 @@ static bool alloc_tensor_range(struct ggml_context * ctx,
947947
948948 ggml_backend_buffer_t buffer = ggml_backend_buft_alloc_buffer (buft , size );
949949 if (buffer == NULL ) {
950- #ifndef NDEBUG
951- GGML_LOG_DEBUG ("%s: failed to allocate %s buffer of size %zu\n" , __func__ , ggml_backend_buft_name (buft ), size );
952- #endif
950+ GGML_LOG_ERROR ("%s: failed to allocate %s buffer of size %zu\n" , __func__ , ggml_backend_buft_name (buft ), size );
953951 free_buffers (buffers , n_buffers );
954952 return false;
955953 }
956954
955+ * buffers = realloc (* buffers , sizeof (ggml_backend_buffer_t ) * (* n_buffers + 1 ));
956+ (* buffers )[(* n_buffers )++ ] = buffer ;
957+
957958 struct ggml_tallocr tallocr = ggml_tallocr_new (buffer );
958959
959960 for (struct ggml_tensor * t = first ; t != last ; t = ggml_get_next_tensor (ctx , t )) {
961+ enum ggml_status status = GGML_STATUS_SUCCESS ;
960962 if (t -> data == NULL ) {
961963 if (t -> view_src == NULL ) {
962- ggml_tallocr_alloc (& tallocr , t );
964+ status = ggml_tallocr_alloc (& tallocr , t );
963965 } else if (t -> buffer == NULL ) {
964- enum ggml_status status = ggml_backend_view_init (t );
965- if (status != GGML_STATUS_SUCCESS ) {
966- GGML_LOG_WARN ("%s: failed to ggml_backend_view_init: %s\n" , __func__ , ggml_status_to_string (status ));
967- free_buffers (buffers , n_buffers ); // Check with reviewers
968- ggml_backend_buffer_free (buffer );
969- // Check with reviewers: any need to nullify all the tensors ptrs (first, ..., t)?
970- return false;
971- }
966+ status = ggml_backend_view_init (t );
972967 }
973968 } else {
974969 if (t -> view_src != NULL && t -> buffer == NULL ) {
975970 // view of a pre-allocated tensor
976- enum ggml_status status = ggml_backend_view_init (t );
977- if (status != GGML_STATUS_SUCCESS ) {
978- GGML_LOG_WARN ("%s: failed to ggml_backend_view_init: %s\n" , __func__ , ggml_status_to_string (status ));
979- // Check with reviewers: any need to nullify all the tensors (first, ..., t)?
980- free_buffers (buffers , n_buffers ); // Check with reviewers
981- ggml_backend_buffer_free (buffer );
982- return false;
983- }
971+ status = ggml_backend_view_init (t );
984972 }
985973 }
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+ }
986979 }
987980
988- * buffers = realloc (* buffers , sizeof (ggml_backend_buffer_t ) * (* n_buffers + 1 ));
989- (* buffers )[(* n_buffers )++ ] = buffer ;
990-
991981 return true;
992982}
993983
0 commit comments