@@ -653,6 +653,9 @@ struct ggml_backend_cpu_context {
653
653
int n_threads ;
654
654
void * work_data ;
655
655
size_t work_size ;
656
+
657
+ ggml_abort_callback abort_callback ;
658
+ void * abort_callback_data ;
656
659
};
657
660
658
661
GGML_CALL static const char * ggml_backend_cpu_name (ggml_backend_t backend ) {
@@ -691,6 +694,9 @@ GGML_CALL static ggml_backend_graph_plan_t ggml_backend_cpu_graph_plan_create(gg
691
694
cpu_plan -> cplan .work_data = malloc (cpu_plan -> cplan .work_size );
692
695
}
693
696
697
+ cpu_plan -> cplan .abort_callback = cpu_ctx -> abort_callback ;
698
+ cpu_plan -> cplan .abort_callback_data = cpu_ctx -> abort_callback_data ;
699
+
694
700
return cpu_plan ;
695
701
}
696
702
@@ -721,9 +727,11 @@ GGML_CALL static bool ggml_backend_cpu_graph_compute(ggml_backend_t backend, str
721
727
cpu_ctx -> work_data = realloc (cpu_ctx -> work_data , cplan .work_size );
722
728
cpu_ctx -> work_size = cplan .work_size ;
723
729
}
724
-
725
730
cplan .work_data = cpu_ctx -> work_data ;
726
731
732
+ cplan .abort_callback = cpu_ctx -> abort_callback ;
733
+ cplan .abort_callback_data = cpu_ctx -> abort_callback_data ;
734
+
727
735
ggml_graph_compute (cgraph , & cplan );
728
736
return true;
729
737
}
@@ -759,9 +767,11 @@ static struct ggml_backend_i cpu_backend_i = {
759
767
ggml_backend_t ggml_backend_cpu_init (void ) {
760
768
struct ggml_backend_cpu_context * ctx = malloc (sizeof (struct ggml_backend_cpu_context ));
761
769
762
- ctx -> n_threads = GGML_DEFAULT_N_THREADS ;
763
- ctx -> work_data = NULL ;
764
- ctx -> work_size = 0 ;
770
+ ctx -> n_threads = GGML_DEFAULT_N_THREADS ;
771
+ ctx -> work_data = NULL ;
772
+ ctx -> work_size = 0 ;
773
+ ctx -> abort_callback = NULL ;
774
+ ctx -> abort_callback_data = NULL ;
765
775
766
776
ggml_backend_t cpu_backend = malloc (sizeof (struct ggml_backend ));
767
777
@@ -783,6 +793,14 @@ void ggml_backend_cpu_set_n_threads(ggml_backend_t backend_cpu, int n_threads) {
783
793
ctx -> n_threads = n_threads ;
784
794
}
785
795
796
+ void ggml_backend_cpu_set_abort_callback (ggml_backend_t backend_cpu , ggml_abort_callback abort_callback , void * abort_callback_data ) {
797
+ GGML_ASSERT (ggml_backend_is_cpu (backend_cpu ));
798
+
799
+ struct ggml_backend_cpu_context * ctx = (struct ggml_backend_cpu_context * )backend_cpu -> context ;
800
+ ctx -> abort_callback = abort_callback ;
801
+ ctx -> abort_callback_data = abort_callback_data ;
802
+ }
803
+
786
804
GGML_CALL ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr (void * ptr , size_t size ) {
787
805
return ggml_backend_buffer_init (ggml_backend_cpu_buffer_type (), cpu_backend_buffer_i_from_ptr , ptr , size );
788
806
}
0 commit comments