@@ -20,13 +20,13 @@ extern "C" {
20
20
// Backend buffer type
21
21
//
22
22
23
- GGML_API const char * ggml_backend_buft_name (ggml_backend_buffer_type_t buft );
24
- GGML_API ggml_backend_buffer_t ggml_backend_buft_alloc_buffer (ggml_backend_buffer_type_t buft , size_t size );
25
- GGML_API size_t ggml_backend_buft_get_alignment (ggml_backend_buffer_type_t buft );
26
- GGML_API size_t ggml_backend_buft_get_max_size (ggml_backend_buffer_type_t buft );
27
- GGML_API size_t ggml_backend_buft_get_alloc_size (ggml_backend_buffer_type_t buft , struct ggml_tensor * tensor );
28
- GGML_API bool ggml_backend_buft_is_host (ggml_backend_buffer_type_t buft );
29
- GGML_API ggml_backend_dev_t ggml_backend_buft_get_device (ggml_backend_buffer_type_t buft );
23
+ GGML_API const char * ggml_backend_buft_name (ggml_backend_buffer_type_t buft );
24
+ GGML_API ggml_backend_buffer_t ggml_backend_buft_alloc_buffer (ggml_backend_buffer_type_t buft , size_t size );
25
+ GGML_API size_t ggml_backend_buft_get_alignment (ggml_backend_buffer_type_t buft );
26
+ GGML_API size_t ggml_backend_buft_get_max_size (ggml_backend_buffer_type_t buft );
27
+ GGML_API size_t ggml_backend_buft_get_alloc_size (ggml_backend_buffer_type_t buft , struct ggml_tensor * tensor );
28
+ GGML_API bool ggml_backend_buft_is_host (ggml_backend_buffer_type_t buft );
29
+ GGML_API ggml_backend_dev_t ggml_backend_buft_get_device (ggml_backend_buffer_type_t buft );
30
30
31
31
//
32
32
// Backend buffer
@@ -53,6 +53,9 @@ extern "C" {
53
53
GGML_API ggml_backend_buffer_type_t ggml_backend_buffer_get_type (ggml_backend_buffer_t buffer );
54
54
GGML_API void ggml_backend_buffer_reset (ggml_backend_buffer_t buffer );
55
55
56
+ // tensor copy between different backends
57
+ GGML_API void ggml_backend_tensor_copy (struct ggml_tensor * src , struct ggml_tensor * dst );
58
+
56
59
//
57
60
// Backend (stream)
58
61
//
@@ -88,49 +91,70 @@ extern "C" {
88
91
GGML_API bool ggml_backend_supports_buft (ggml_backend_t backend , ggml_backend_buffer_type_t buft );
89
92
GGML_API bool ggml_backend_offload_op (ggml_backend_t backend , const struct ggml_tensor * op );
90
93
91
- // tensor copy between different backends
92
- GGML_API void ggml_backend_tensor_copy (struct ggml_tensor * src , struct ggml_tensor * dst );
93
-
94
94
// asynchronous copy
95
95
// the copy is performed after all the currently queued operations in backend_src
96
96
// backend_dst will wait for the copy to complete before performing other operations
97
97
// automatic fallback to sync copy if async is not supported
98
98
GGML_API void ggml_backend_tensor_copy_async (ggml_backend_t backend_src , ggml_backend_t backend_dst , struct ggml_tensor * src , struct ggml_tensor * dst );
99
99
100
- // events
101
- GGML_API ggml_backend_event_t ggml_backend_event_new (ggml_backend_dev_t device );
102
- GGML_API void ggml_backend_event_free (ggml_backend_event_t event );
103
- GGML_API void ggml_backend_event_record (ggml_backend_event_t event , ggml_backend_t backend );
100
+ GGML_API ggml_backend_dev_t ggml_backend_get_device (ggml_backend_t backend );
101
+
102
+ //
103
+ // Events
104
+ //
105
+
106
+ GGML_API ggml_backend_event_t ggml_backend_event_new (ggml_backend_dev_t device );
107
+ GGML_API void ggml_backend_event_free (ggml_backend_event_t event );
108
+ GGML_API void ggml_backend_event_record (ggml_backend_event_t event , ggml_backend_t backend );
104
109
GGML_API void ggml_backend_event_synchronize (ggml_backend_event_t event );
105
- GGML_API void ggml_backend_event_wait (ggml_backend_t backend , ggml_backend_event_t event );
110
+ GGML_API void ggml_backend_event_wait (ggml_backend_t backend , ggml_backend_event_t event );
106
111
107
112
//
108
113
// Backend device
109
114
//
110
115
111
- enum ggml_backend_device_type {
116
+ enum ggml_backend_dev_type {
112
117
GGML_BACKEND_DEVICE_TYPE_CPU ,
113
118
GGML_BACKEND_DEVICE_TYPE_GPU ,
114
- // devices with full capabilities (excludes backends such as BLAS)
119
+ // devices with full capabilities (excludes backends such as BLAS that only support matrix multiplication )
115
120
GGML_BACKEND_DEVICE_TYPE_CPU_FULL ,
116
121
GGML_BACKEND_DEVICE_TYPE_GPU_FULL
117
122
};
118
123
124
+ // functionality supported by the device
125
+ struct ggml_backend_dev_caps {
126
+ // asynchronous operations
127
+ bool async ;
128
+ // pinned host buffer
129
+ bool host_buffer ;
130
+ // event synchronization
131
+ bool events ;
132
+ };
133
+
134
+ // all the device properties
135
+ struct ggml_backend_dev_props {
136
+ const char * name ;
137
+ const char * description ;
138
+ size_t memory_free ;
139
+ size_t memory_total ;
140
+ enum ggml_backend_dev_type type ;
141
+ struct ggml_backend_dev_caps caps ;
142
+ };
143
+
119
144
GGML_API const char * ggml_backend_dev_name (ggml_backend_dev_t device );
120
145
GGML_API const char * ggml_backend_dev_description (ggml_backend_dev_t device );
121
146
GGML_API void ggml_backend_dev_memory (ggml_backend_dev_t device , size_t * free , size_t * total );
122
- GGML_API enum ggml_backend_device_type ggml_backend_dev_type (ggml_backend_dev_t device );
147
+ GGML_API enum ggml_backend_dev_type ggml_backend_dev_type (ggml_backend_dev_t device );
148
+ GGML_API void ggml_backend_dev_get_props (ggml_backend_dev_t device , struct ggml_backend_dev_props * props );
123
149
GGML_API ggml_backend_reg_t ggml_backend_dev_backend_reg (ggml_backend_dev_t device );
124
150
GGML_API ggml_backend_t ggml_backend_dev_init (ggml_backend_dev_t device , const char * params );
125
151
GGML_API ggml_backend_buffer_type_t ggml_backend_dev_buffer_type (ggml_backend_dev_t device );
126
152
GGML_API ggml_backend_buffer_type_t ggml_backend_dev_host_buffer_type (ggml_backend_dev_t device );
127
153
GGML_API ggml_backend_buffer_t ggml_backend_dev_buffer_from_host_ptr (ggml_backend_dev_t device , void * ptr , size_t size , size_t max_tensor_size );
128
154
129
- GGML_API bool ggml_backend_dev_supports_op (ggml_backend_dev_t device , const struct ggml_tensor * op );
130
- GGML_API bool ggml_backend_dev_supports_buft (ggml_backend_dev_t device , ggml_backend_buffer_type_t buft );
131
- GGML_API bool ggml_backend_dev_offload_op (ggml_backend_dev_t device , const struct ggml_tensor * op );
132
-
133
- GGML_API ggml_backend_event_t ggml_backend_dev_event_new (ggml_backend_dev_t device );
155
+ GGML_API bool ggml_backend_dev_supports_op (ggml_backend_dev_t device , const struct ggml_tensor * op );
156
+ GGML_API bool ggml_backend_dev_supports_buft (ggml_backend_dev_t device , ggml_backend_buffer_type_t buft );
157
+ GGML_API bool ggml_backend_dev_offload_op (ggml_backend_dev_t device , const struct ggml_tensor * op );
134
158
135
159
//
136
160
// Backend (reg)
@@ -158,16 +182,16 @@ extern "C" {
158
182
GGML_API size_t ggml_backend_dev_count (void );
159
183
GGML_API ggml_backend_dev_t ggml_backend_dev_get (size_t index );
160
184
GGML_API ggml_backend_dev_t ggml_backend_dev_by_name (const char * name );
161
- GGML_API ggml_backend_dev_t ggml_backend_dev_by_type (enum ggml_backend_device_type type );
185
+ GGML_API ggml_backend_dev_t ggml_backend_dev_by_type (enum ggml_backend_dev_type type );
162
186
163
187
// Set the log callback for all registered backends
164
188
GGML_API void ggml_backend_set_log_callback (ggml_log_callback log_callback , void * user_data );
165
189
166
- // Direct Backend (stream) initialization
190
+ // Direct backend (stream) initialization
167
191
// = ggml_backend_dev_init(ggml_backend_dev_by_name(name), params)
168
192
GGML_API ggml_backend_t ggml_backend_init_by_name (const char * name , const char * params );
169
193
// = ggml_backend_dev_init(ggml_backend_dev_by_type(type), params)
170
- GGML_API ggml_backend_t ggml_backend_init_by_type (enum ggml_backend_device_type type , const char * params );
194
+ GGML_API ggml_backend_t ggml_backend_init_by_type (enum ggml_backend_dev_type type , const char * params );
171
195
// = ggml_backend_dev_init(ggml_backend_dev_by_type(GPU_FULL) OR ggml_backend_dev_by_type(CPU_FULL), NULL)
172
196
GGML_API ggml_backend_t ggml_backend_init_best (void );
173
197
@@ -276,7 +300,6 @@ extern "C" {
276
300
GGML_API void ggml_backend_tensor_alloc (ggml_backend_buffer_t buffer , struct ggml_tensor * tensor , void * addr );
277
301
GGML_API void ggml_backend_view_init (struct ggml_tensor * tensor );
278
302
279
-
280
303
//
281
304
// CPU backend
282
305
//
0 commit comments