Skip to content

Commit 9900646

Browse files
committed
metal : refactor device buffer
ggml-ci
1 parent 3b8a08c commit 9900646

File tree

3 files changed

+584
-507
lines changed

3 files changed

+584
-507
lines changed

ggml/src/ggml-metal/ggml-metal-device.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
extern "C" {
77
#endif
88

9+
//
10+
// device
11+
//
12+
913
typedef struct ggml_backend_metal_device * ggml_backend_metal_device_t;
1014

1115
struct ggml_backend_metal_device_props {
@@ -39,6 +43,36 @@ void ggml_backend_metal_device_get_memory(ggml_backend_metal_device_t ctx, size_
3943

4044
struct ggml_backend_metal_device_props ggml_backend_metal_device_get_props(ggml_backend_metal_device_t ctx);
4145

46+
//
47+
// device buffers
48+
//
49+
50+
typedef struct ggml_backend_metal_buffer * ggml_backend_metal_buffer_t;
51+
52+
ggml_backend_metal_buffer_t ggml_backend_metal_buffer_init(ggml_backend_metal_device_t device, size_t size, bool shared);
53+
ggml_backend_metal_buffer_t ggml_backend_metal_buffer_map (ggml_backend_metal_device_t device, void * ptr, size_t size, size_t max_tensor_size);
54+
55+
void ggml_backend_metal_buffer_free (ggml_backend_metal_buffer_t buffer);
56+
void * ggml_backend_metal_buffer_get_base (ggml_backend_metal_buffer_t buffer);
57+
bool ggml_backend_metal_buffer_is_shared(ggml_backend_metal_buffer_t buffer);
58+
59+
void ggml_backend_metal_buffer_memset_tensor(ggml_backend_metal_buffer_t buffer, struct ggml_tensor * tensor, uint8_t value, size_t offset, size_t size);
60+
void ggml_backend_metal_buffer_set_tensor (ggml_backend_metal_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);
61+
void ggml_backend_metal_buffer_get_tensor (ggml_backend_metal_buffer_t buffer, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size);
62+
void ggml_backend_metal_buffer_clear (ggml_backend_metal_buffer_t buffer, uint8_t value);
63+
64+
65+
struct ggml_backend_metal_buffer_id {
66+
void * metal;
67+
size_t offs;
68+
};
69+
70+
// finds the Metal buffer that contains the tensor data on the GPU device
71+
// the assumption is that there is 1-to-1 mapping between the host and device memory buffers, so we can find the
72+
// Metal buffer based on the host memory pointer
73+
//
74+
struct ggml_backend_metal_buffer_id ggml_backend_metal_buffer_get_id(ggml_backend_metal_buffer_t buffer, const struct ggml_tensor * t);
75+
4276
#ifdef __cplusplus
4377
}
4478
#endif

0 commit comments

Comments
 (0)