@@ -1051,8 +1051,9 @@ struct ggml_backend_sched {
10511051 struct ggml_cgraph * graph ;
10521052
10531053 // graph splits
1054- struct ggml_backend_sched_split splits [ GGML_SCHED_MAX_SPLITS ] ;
1054+ struct ggml_backend_sched_split * splits ;
10551055 int n_splits ;
1056+ int splits_capacity ;
10561057
10571058 // pipeline parallelism support
10581059 int n_copies ;
@@ -1443,6 +1444,10 @@ static void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct gg
14431444 if (node_backend_id != cur_backend_id || offload ) {
14441445 split -> i_end = i ;
14451446 i_split ++ ;
1447+ if (i_split >= sched -> splits_capacity ) {
1448+ sched -> splits_capacity *= 2 ;
1449+ sched -> splits = realloc (sched -> splits , sched -> splits_capacity * sizeof (struct ggml_backend_sched_split ));
1450+ }
14461451 GGML_ASSERT (i_split < GGML_SCHED_MAX_SPLITS );
14471452 split = & sched -> splits [i_split ];
14481453 split -> backend_id = node_backend_id ;
@@ -1711,7 +1716,9 @@ ggml_backend_sched_t ggml_backend_sched_new(
17111716
17121717 sched -> n_copies = parallel ? GGML_SCHED_MAX_COPIES : 1 ;
17131718
1714- GGML_ASSERT (sched -> n_copies <= GGML_SCHED_MAX_COPIES );
1719+ const int initial_splits_capacity = 16 ;
1720+ sched -> splits = calloc (sizeof (sched -> splits [0 ]), initial_splits_capacity );
1721+ sched -> splits_capacity = initial_splits_capacity ;
17151722
17161723 for (int b = 0 ; b < n_backends ; b ++ ) {
17171724 sched -> backends [b ] = backends [b ];
@@ -1742,6 +1749,7 @@ void ggml_backend_sched_free(ggml_backend_sched_t sched) {
17421749 }
17431750 ggml_gallocr_free (sched -> galloc );
17441751 ggml_free (sched -> ctx );
1752+ free (sched -> splits );
17451753 free (sched -> hash_set .keys );
17461754 free (sched -> tensor_backend_id );
17471755 free (sched -> tensor_copies );
0 commit comments