Skip to content

Commit c927b34

Browse files
committed
remoting: implement the free_buffer function
1 parent 6fc0c88 commit c927b34

File tree

6 files changed

+39
-4
lines changed

6 files changed

+39
-4
lines changed

ggml/src/ggml-remotingbackend/backend-dispatched-buffer.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,16 @@ backend_buffer_clear(struct vn_cs_encoder *enc, struct vn_cs_decoder *dec, struc
114114

115115
return 0;
116116
}
117+
118+
uint32_t
119+
backend_buffer_free_buffer(struct vn_cs_encoder *enc, struct vn_cs_decoder *dec, struct virgl_apir_context *ctx) {
120+
UNUSED(ctx);
121+
UNUSED(enc);
122+
123+
ggml_backend_buffer_t buffer;
124+
buffer = vn_decode_ggml_buffer(dec);
125+
126+
buffer->iface.free_buffer(buffer);
127+
128+
return 0;
129+
}

ggml/src/ggml-remotingbackend/backend-dispatched.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ uint32_t backend_buffer_get_base(struct vn_cs_encoder *enc, struct vn_cs_decoder
4040
uint32_t backend_buffer_set_tensor(struct vn_cs_encoder *enc, struct vn_cs_decoder *dec, struct virgl_apir_context *ctx);
4141
uint32_t backend_buffer_get_tensor(struct vn_cs_encoder *enc, struct vn_cs_decoder *dec, struct virgl_apir_context *ctx);
4242
uint32_t backend_buffer_clear(struct vn_cs_encoder *enc, struct vn_cs_decoder *dec, struct virgl_apir_context *ctx);
43+
uint32_t backend_buffer_free_buffer(struct vn_cs_encoder *enc, struct vn_cs_decoder *dec, struct virgl_apir_context *ctx);
4344

4445
/* backend */
4546
uint32_t backend_graph_compute(struct vn_cs_encoder *enc, struct vn_cs_decoder *dec, struct virgl_apir_context *ctx);
@@ -69,6 +70,7 @@ static inline const char *backend_dispatch_command_name(ApirBackendCommandType t
6970
case APIR_COMMAND_TYPE_BUFFER_SET_TENSOR: return "backend_buffer_set_tensor";
7071
case APIR_COMMAND_TYPE_BUFFER_GET_TENSOR: return "backend_buffer_get_tensor";
7172
case APIR_COMMAND_TYPE_BUFFER_CLEAR: return "backend_buffer_clear";
73+
case APIR_COMMAND_TYPE_BUFFER_FREE_BUFFER: return "backend_buffer_free_buffer";
7274

7375
/* backend */
7476
case APIR_COMMAND_TYPE_BACKEND_GRAPH_COMPUTE: return "backend_graph_compute";
@@ -99,6 +101,7 @@ static const backend_dispatch_t apir_backend_dispatch_table[APIR_BACKEND_DISPATC
99101
[APIR_COMMAND_TYPE_BUFFER_SET_TENSOR] = backend_buffer_set_tensor,
100102
[APIR_COMMAND_TYPE_BUFFER_GET_TENSOR] = backend_buffer_get_tensor,
101103
[APIR_COMMAND_TYPE_BUFFER_CLEAR] = backend_buffer_clear,
104+
[APIR_COMMAND_TYPE_BUFFER_FREE_BUFFER] = backend_buffer_free_buffer,
102105

103106
/* backend */
104107
[APIR_COMMAND_TYPE_BACKEND_GRAPH_COMPUTE] = backend_graph_compute,

ggml/src/ggml-remotingbackend/shared/apir_backend.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,13 @@ typedef enum ApirBackendCommandType {
5252
APIR_COMMAND_TYPE_BUFFER_SET_TENSOR = 14,
5353
APIR_COMMAND_TYPE_BUFFER_GET_TENSOR = 15,
5454
APIR_COMMAND_TYPE_BUFFER_CLEAR = 16,
55+
APIR_COMMAND_TYPE_BUFFER_FREE_BUFFER = 17,
5556

5657
/* backend */
57-
APIR_COMMAND_TYPE_BACKEND_GRAPH_COMPUTE = 17,
58+
APIR_COMMAND_TYPE_BACKEND_GRAPH_COMPUTE = 18,
5859

5960
// last command_type index + 1
60-
APIR_BACKEND_DISPATCH_TABLE_COUNT = 18,
61+
APIR_BACKEND_DISPATCH_TABLE_COUNT = 19,
6162
} ApirBackendCommandType;
6263

6364

ggml/src/ggml-remotingfrontend/ggml-backend-buffer.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,11 @@ static void ggml_backend_remoting_buffer_clear(ggml_backend_buffer_t buffer, uin
7676
static void ggml_backend_remoting_buffer_free_buffer(ggml_backend_buffer_t buffer) {
7777
UNUSED(buffer);
7878

79-
NOT_IMPLEMENTED;
79+
IMPLEMENTED_ONCE;
8080

81-
STOP_HERE;
81+
struct virtgpu *gpu = BUFFER_TO_GPU(buffer);
82+
83+
apir_buffer_free_buffer(gpu, BUFFER_TO_HANDLE(buffer));
8284
}
8385

8486
const ggml_backend_buffer_i ggml_backend_remoting_buffer_interface = {

ggml/src/ggml-remotingfrontend/virtgpu-forward-buffer.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,18 @@ apir_buffer_clear(struct virtgpu *gpu, apir_buffer_handle_t buffer_handle,
9999

100100
REMOTE_CALL_FINISH(gpu, encoder, decoder);
101101
}
102+
103+
104+
void
105+
apir_buffer_free_buffer(struct virtgpu *gpu, apir_buffer_handle_t buffer_handle) {
106+
struct vn_cs_encoder *encoder;
107+
struct vn_cs_decoder *decoder;
108+
109+
REMOTE_CALL_PREPARE(gpu, encoder, APIR_COMMAND_TYPE_BUFFER_FREE_BUFFER);
110+
111+
vn_encode_apir_buffer_handle_t(encoder, &buffer_handle);
112+
113+
REMOTE_CALL(gpu, encoder, decoder);
114+
115+
REMOTE_CALL_FINISH(gpu, encoder, decoder);
116+
}

ggml/src/ggml-remotingfrontend/virtgpu-forward.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ void apir_buffer_get_tensor(struct virtgpu *gpu, apir_buffer_handle_t buffer_han
3535
const ggml_tensor *tensor, void *data, size_t offset, size_t size);
3636
void apir_buffer_clear(struct virtgpu *gpu, apir_buffer_handle_t buffer_handle,
3737
uint8_t value);
38+
void apir_buffer_free_buffer(struct virtgpu *gpu, apir_buffer_handle_t buffer_handle);
3839

3940
/* backend */
4041

0 commit comments

Comments
 (0)