|
|
@@ -1706,14 +1706,16 @@ static void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct gg
|
|
|
static bool ggml_backend_sched_alloc_splits(ggml_backend_sched_t sched) {
|
|
|
bool backend_ids_changed = false;
|
|
|
for (int i = 0; i < sched->graph->n_nodes; i++) {
|
|
|
- if (sched->node_backend_ids[i] != sched->prev_node_backend_ids[i]) {
|
|
|
+ if (sched->node_backend_ids[i] != sched->prev_node_backend_ids[i] &&
|
|
|
+ sched->bufts[sched->node_backend_ids[i]] != sched->bufts[sched->prev_node_backend_ids[i]]) {
|
|
|
backend_ids_changed = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if (!backend_ids_changed) {
|
|
|
for (int i = 0; i < sched->graph->n_leafs; i++) {
|
|
|
- if (sched->leaf_backend_ids[i] != sched->prev_leaf_backend_ids[i]) {
|
|
|
+ if (sched->leaf_backend_ids[i] != sched->prev_leaf_backend_ids[i] &&
|
|
|
+ sched->bufts[sched->leaf_backend_ids[i]] != sched->bufts[sched->prev_leaf_backend_ids[i]]) {
|
|
|
backend_ids_changed = true;
|
|
|
break;
|
|
|
}
|
|
|
@@ -1977,6 +1979,15 @@ int ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched) {
|
|
|
return sched->n_copies;
|
|
|
}
|
|
|
|
|
|
+int ggml_backend_sched_get_n_backends(ggml_backend_sched_t sched) {
|
|
|
+ return sched->n_backends;
|
|
|
+}
|
|
|
+
|
|
|
+ggml_backend_t ggml_backend_sched_get_backend(ggml_backend_sched_t sched, int i) {
|
|
|
+ GGML_ASSERT(i >= 0 && i < sched->n_backends);
|
|
|
+ return sched->backends[i];
|
|
|
+}
|
|
|
+
|
|
|
size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend) {
|
|
|
int backend_index = ggml_backend_sched_backend_id(sched, backend);
|
|
|
GGML_ASSERT(backend_index >= 0 && backend_index < sched->n_backends);
|