1#include "ggml-remoting.h"
2#include "../../include/ggml-virtgpu.h"
3
4static const char * ggml_backend_remoting_get_name(ggml_backend_t backend) {
5 UNUSED(backend);
6
7 return "API Remoting backend";
8}
9
10static void ggml_backend_remoting_free(ggml_backend_t backend) {
11 delete backend;
12}
13
14static ggml_status ggml_backend_remoting_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
15 virtgpu * gpu = DEV_TO_GPU(backend->device);
16
17 return apir_backend_graph_compute(gpu, cgraph);
18}
19
20static void ggml_backend_remoting_graph_optimize(ggml_backend_t backend, ggml_cgraph * cgraph) {
21 virtgpu * gpu = DEV_TO_GPU(backend->device);
22#if true
23 UNUSED(gpu);
24 UNUSED(cgraph);
25#else
26 // not working yet
27
28 apir_backend_graph_optimize(gpu, cgraph);
29#endif
30}
31
32static ggml_backend_i ggml_backend_remoting_interface = {
33 /* .get_name = */ ggml_backend_remoting_get_name,
34 /* .free = */ ggml_backend_remoting_free,
35 /* .set_tensor_async = */ NULL, // ggml_backend_remoting_set_tensor_async,
36 /* .get_tensor_async = */ NULL, // ggml_backend_remoting_get_tensor_async,
37 /* .cpy_tensor_async = */ NULL, // ggml_backend_remoting_cpy_tensor_async,
38 /* .synchronize = */ NULL, // ggml_backend_remoting_synchronize,
39 /* .graph_plan_create = */ NULL,
40 /* .graph_plan_free = */ NULL,
41 /* .graph_plan_update = */ NULL,
42 /* .graph_plan_compute = */ NULL,
43 /* .graph_compute = */ ggml_backend_remoting_graph_compute,
44 /* .event_record = */ NULL,
45 /* .event_wait = */ NULL,
46 /* .graph_optimize = */ ggml_backend_remoting_graph_optimize,
47};
48
49static ggml_guid_t ggml_backend_remoting_guid() {
50 static ggml_guid guid = { 0xb8, 0xf7, 0x4f, 0x86, 0x14, 0x03, 0x86, 0x02,
51 0x91, 0xc8, 0xdd, 0xe9, 0x02, 0x3f, 0xc0, 0x2b };
52
53 return &guid;
54}
55
56ggml_backend_t ggml_backend_remoting_device_init(ggml_backend_dev_t dev, const char * params) {
57 UNUSED(params);
58
59 ggml_backend_remoting_device_context * ctx = (ggml_backend_remoting_device_context *) dev->context;
60
61 ggml_backend_t remoting_backend = new ggml_backend{
62 /* .guid = */ ggml_backend_remoting_guid(),
63 /* .interface = */ ggml_backend_remoting_interface,
64 /* .device = */ ggml_backend_reg_dev_get(ggml_backend_virtgpu_reg(), ctx->device),
65 /* .context = */ ctx,
66 };
67
68 return remoting_backend;
69}