| | #include "ggml-remoting.h"
|
| |
|
| | #define BUFFER_TO_GPU(name) ((ggml_backend_remoting_buffer_context *) (name)->context)->gpu
|
| |
|
| | static void * ggml_backend_remoting_buffer_get_base(ggml_backend_buffer_t buffer) {
|
| | ggml_backend_remoting_buffer_context * context = (ggml_backend_remoting_buffer_context *) buffer->context;
|
| | if (context->base) {
|
| | return context->base;
|
| | }
|
| |
|
| | context->base = apir_buffer_get_base(BUFFER_TO_GPU(buffer), BUFFER_TO_APIR_CONTEXT(buffer));
|
| |
|
| | return context->base;
|
| | }
|
| |
|
| | static void ggml_backend_remoting_buffer_set_tensor(ggml_backend_buffer_t buffer,
|
| | ggml_tensor * tensor,
|
| | const void * data,
|
| | size_t offset,
|
| | size_t size) {
|
| | virtgpu * gpu = BUFFER_TO_GPU(buffer);
|
| |
|
| | ggml_backend_remoting_buffer_context * context = BUFFER_TO_GGML_CONTEXT(buffer);
|
| | if (context->is_from_ptr) {
|
| | memcpy((char *) tensor->data + offset, data, size);
|
| | } else {
|
| | apir_buffer_set_tensor(gpu, BUFFER_TO_APIR_CONTEXT(buffer), tensor, data, offset, size);
|
| | }
|
| |
|
| | return;
|
| | }
|
| |
|
| | static void ggml_backend_remoting_buffer_get_tensor(ggml_backend_buffer_t buffer,
|
| | const ggml_tensor * tensor,
|
| | void * data,
|
| | size_t offset,
|
| | size_t size) {
|
| | virtgpu * gpu = BUFFER_TO_GPU(buffer);
|
| | ggml_backend_remoting_buffer_context * context = BUFFER_TO_GGML_CONTEXT(buffer);
|
| | if (context->is_from_ptr) {
|
| | memcpy(data, (const char *) tensor->data + offset, size);
|
| | } else {
|
| | apir_buffer_get_tensor(gpu, BUFFER_TO_APIR_CONTEXT(buffer), tensor, data, offset, size);
|
| | }
|
| | }
|
| |
|
| | static void ggml_backend_remoting_buffer_set_tensor_from_ptr(ggml_backend_buffer_t buffer,
|
| | ggml_tensor * tensor,
|
| | const void * data,
|
| | size_t offset,
|
| | size_t size) {
|
| | UNUSED(buffer);
|
| |
|
| | memcpy((char *) tensor->data + offset, data, size);
|
| |
|
| | return;
|
| | }
|
| |
|
| | static void ggml_backend_remoting_buffer_get_tensor_from_ptr(ggml_backend_buffer_t buffer,
|
| | const ggml_tensor * tensor,
|
| | void * data,
|
| | size_t offset,
|
| | size_t size) {
|
| | UNUSED(buffer);
|
| |
|
| | memcpy(data, (const char *) tensor->data + offset, size);
|
| | }
|
| |
|
| | static bool ggml_backend_remoting_buffer_cpy_tensor(ggml_backend_buffer_t buffer,
|
| | const ggml_tensor * src,
|
| | ggml_tensor * dst) {
|
| | virtgpu * gpu = BUFFER_TO_GPU(buffer);
|
| |
|
| | bool ret = apir_buffer_cpy_tensor(gpu, BUFFER_TO_APIR_CONTEXT(buffer), src, dst);
|
| |
|
| | return ret;
|
| | }
|
| |
|
| | static void ggml_backend_remoting_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
|
| | virtgpu * gpu = BUFFER_TO_GPU(buffer);
|
| |
|
| | apir_buffer_clear(gpu, BUFFER_TO_APIR_CONTEXT(buffer), value);
|
| |
|
| | return;
|
| | }
|
| |
|
| | static void ggml_backend_remoting_buffer_free_buffer(ggml_backend_buffer_t buffer) {
|
| | virtgpu * gpu = BUFFER_TO_GPU(buffer);
|
| |
|
| | apir_buffer_free_buffer(gpu, BUFFER_TO_APIR_CONTEXT(buffer));
|
| |
|
| | ggml_backend_remoting_buffer_context * context = BUFFER_TO_GGML_CONTEXT(buffer);
|
| | free(context);
|
| | buffer->context = NULL;
|
| | }
|
| |
|
| | const ggml_backend_buffer_i ggml_backend_remoting_buffer_interface = {
|
| | ggml_backend_remoting_buffer_free_buffer,
|
| | ggml_backend_remoting_buffer_get_base,
|
| | NULL,
|
| | NULL,
|
| | ggml_backend_remoting_buffer_set_tensor,
|
| | ggml_backend_remoting_buffer_get_tensor,
|
| | ggml_backend_remoting_buffer_cpy_tensor,
|
| | ggml_backend_remoting_buffer_clear,
|
| | NULL,
|
| | };
|
| |
|
| | const ggml_backend_buffer_i ggml_backend_remoting_buffer_from_ptr_interface = {
|
| | ggml_backend_remoting_buffer_free_buffer,
|
| | ggml_backend_remoting_buffer_get_base,
|
| | NULL,
|
| | NULL,
|
| | ggml_backend_remoting_buffer_set_tensor_from_ptr,
|
| | ggml_backend_remoting_buffer_get_tensor_from_ptr,
|
| | ggml_backend_remoting_buffer_cpy_tensor,
|
| | ggml_backend_remoting_buffer_clear,
|
| | NULL,
|
| | };
|
| |
|