Skip to content

Commit 2257cf7

Browse files
committed
ggml-alloc : split into tensor and graph allocators
1 parent a186173 commit 2257cf7

File tree

4 files changed

+326
-212
lines changed

4 files changed

+326
-212
lines changed

include/ggml/ggml-alloc.h

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ extern "C" {
88

99
struct ggml_backend;
1010
struct ggml_backend_buffer;
11+
12+
//
13+
// Legacy API
14+
//
15+
1116
typedef struct ggml_allocr * ggml_allocr_t;
1217

1318
// initialize allocator for use with CPU backend only
@@ -33,12 +38,47 @@ GGML_API size_t ggml_allocr_max_size (ggml_allocr_t alloc);
3338

3439
GGML_API size_t ggml_allocr_alloc_graph(ggml_allocr_t alloc, struct ggml_cgraph * graph);
3540

41+
//
42+
// ggml-backend v2 API
43+
//
44+
45+
// Seperate tensor and graph allocator objects
46+
// This is necessary for multi-backend allocation because the graph allocator needs to use multiple tensor allocators
47+
// The original API is kept as a wrapper around the new API
48+
49+
// Tensor allocator
50+
typedef struct ggml_tallocr * ggml_tallocr_t;
51+
52+
GGML_API ggml_tallocr_t ggml_tallocr_new(void * data, size_t size, size_t alignment);
53+
GGML_API ggml_tallocr_t ggml_tallocr_new_measure(size_t alignment);
54+
GGML_API ggml_tallocr_t ggml_tallocr_new_from_buffer(struct ggml_backend_buffer * buffer);
55+
GGML_API ggml_tallocr_t ggml_tallocr_new_from_backend(struct ggml_backend * backend, size_t size); // allocates an owned buffer
56+
GGML_API ggml_tallocr_t ggml_tallocr_new_measure_from_backend(struct ggml_backend * backend);
57+
58+
GGML_API struct ggml_backend_buffer * ggml_tallocr_get_buffer(ggml_tallocr_t talloc);
59+
60+
GGML_API void ggml_tallocr_free (ggml_tallocr_t talloc);
61+
GGML_API bool ggml_tallocr_is_measure (ggml_tallocr_t talloc);
62+
GGML_API void ggml_tallocr_reset (ggml_tallocr_t talloc);
63+
GGML_API void ggml_tallocr_alloc (ggml_tallocr_t talloc, struct ggml_tensor * tensor);
64+
GGML_API size_t ggml_tallocr_max_size (ggml_tallocr_t talloc);
65+
66+
67+
// Graph allocator
68+
typedef struct ggml_gallocr * ggml_gallocr_t;
69+
70+
GGML_API ggml_gallocr_t ggml_gallocr_new(void);
71+
GGML_API void ggml_gallocr_free(ggml_gallocr_t galloc);
72+
73+
GGML_API void ggml_gallocr_set_parse_seq(ggml_gallocr_t galloc, const int * list, int n);
74+
GGML_API size_t ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, ggml_tallocr_t talloc, struct ggml_cgraph * graph);
75+
3676
// Allocate tensors from the allocators given by the hash table
37-
GGML_API void ggml_allocr_alloc_graph_n(
77+
GGML_API void ggml_gallocr_alloc_graph_n(
78+
ggml_gallocr_t galloc,
3879
struct ggml_cgraph * graph,
3980
struct ggml_hash_set hash_set,
40-
ggml_allocr_t hash_node_alloct[]);
41-
81+
ggml_tallocr_t * hash_node_talloc);
4282

4383
#ifdef __cplusplus
4484
}

include/ggml/ggml-backend.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include "ggml.h"
4+
#include "ggml-alloc.h"
45

56
#ifdef __cplusplus
67
extern "C" {
@@ -109,8 +110,6 @@ extern "C" {
109110
ggml_backend_sched_graph_compute(sched, graph);
110111
*/
111112

112-
struct ggml_allocr;
113-
114113
struct ggml_backend_sched;
115114
typedef struct ggml_backend_sched * ggml_backend_sched_t;
116115

@@ -122,8 +121,8 @@ extern "C" {
122121
// Initialize backend buffers from a measure graph
123122
GGML_API void ggml_backend_sched_init_measure(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph);
124123

125-
GGML_API struct ggml_allocr * ggml_backend_sched_get_allocr(ggml_backend_sched_t sched, ggml_backend_t backend);
126-
GGML_API ggml_backend_buffer_t ggml_backend_sched_get_buffer(ggml_backend_sched_t sched, ggml_backend_t backend);
124+
GGML_API ggml_tallocr_t ggml_backend_sched_get_tallocr(ggml_backend_sched_t sched, ggml_backend_t backend);
125+
GGML_API ggml_backend_buffer_t ggml_backend_sched_get_buffer (ggml_backend_sched_t sched, ggml_backend_t backend);
127126

128127
// Allocate a graph on the backend scheduler
129128
GGML_API void ggml_backend_sched_graph_compute(

0 commit comments

Comments
 (0)