Skip to content

Commit 4e20355

Browse files
committed
ggml: offload the entire cgraph to a specified backend
1 parent 10f2e81 commit 4e20355

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

ggml/src/ggml-backend-impl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ extern "C" {
114114
void (*event_record)(ggml_backend_t backend, ggml_backend_event_t event);
115115
// wait for an event on on a different stream
116116
void (*event_wait) (ggml_backend_t backend, ggml_backend_event_t event);
117+
118+
enum ggml_status (*graph_compute_entire) (ggml_backend_t backend, struct ggml_cgraph * cgraph);
117119
};
118120

119121
struct ggml_backend {

ggml/src/ggml-backend.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,6 +1577,19 @@ enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, st
15771577
}
15781578

15791579
enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
1580+
ggml_backend_t prefer_backend = nullptr;
1581+
for (size_t idx = 0; idx < GGML_SCHED_MAX_BACKENDS; idx++) {
1582+
prefer_backend = sched->backends[idx];
1583+
if (nullptr != prefer_backend) {
1584+
if (ggml_backend_dev_type(prefer_backend->device) == GGML_BACKEND_DEVICE_TYPE_CPU) {
1585+
continue;
1586+
} else {
1587+
if (nullptr != prefer_backend->iface.graph_compute_entire) {
1588+
return prefer_backend->iface.graph_compute_entire(prefer_backend, graph);
1589+
}
1590+
}
1591+
}
1592+
}
15801593
if (!sched->is_reset && !sched->is_alloc) {
15811594
ggml_backend_sched_reset(sched);
15821595
}

0 commit comments

Comments
 (0)