Spaces:
Running
Running
metal : fix struct name (ggml/912)
Browse files- ggml/src/ggml-metal.m +15 -15
ggml/src/ggml-metal.m
CHANGED
|
@@ -210,7 +210,7 @@ enum ggml_metal_kernel_type {
|
|
| 210 |
GGML_METAL_KERNEL_TYPE_COUNT
|
| 211 |
};
|
| 212 |
|
| 213 |
-
struct
|
| 214 |
int n_cb;
|
| 215 |
|
| 216 |
id<MTLDevice> device;
|
|
@@ -293,7 +293,7 @@ static void * ggml_metal_host_malloc(size_t n) {
|
|
| 293 |
return data;
|
| 294 |
}
|
| 295 |
|
| 296 |
-
static struct
|
| 297 |
GGML_METAL_LOG_INFO("%s: allocating\n", __func__);
|
| 298 |
|
| 299 |
#if TARGET_OS_OSX && !GGML_METAL_NDEBUG
|
|
@@ -310,7 +310,7 @@ static struct ggml_metal_context * ggml_metal_init(int n_cb) {
|
|
| 310 |
GGML_METAL_LOG_INFO("%s: picking default device: %s\n", __func__, [[device name] UTF8String]);
|
| 311 |
|
| 312 |
// Configure context
|
| 313 |
-
struct
|
| 314 |
ctx->device = device;
|
| 315 |
ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS);
|
| 316 |
ctx->queue = [ctx->device newCommandQueue];
|
|
@@ -672,7 +672,7 @@ static struct ggml_metal_context * ggml_metal_init(int n_cb) {
|
|
| 672 |
return ctx;
|
| 673 |
}
|
| 674 |
|
| 675 |
-
static void ggml_metal_free(struct
|
| 676 |
GGML_METAL_LOG_INFO("%s: deallocating\n", __func__);
|
| 677 |
|
| 678 |
for (int i = 0; i < GGML_METAL_KERNEL_TYPE_COUNT; ++i) {
|
|
@@ -738,7 +738,7 @@ static id<MTLBuffer> ggml_metal_get_buffer(struct ggml_tensor * t, size_t * offs
|
|
| 738 |
return nil;
|
| 739 |
}
|
| 740 |
|
| 741 |
-
static bool ggml_metal_supports_op(const struct
|
| 742 |
for (size_t i = 0, n = 3; i < n; ++i) {
|
| 743 |
if (op->src[i] != NULL && op->src[i]->type == GGML_TYPE_BF16) {
|
| 744 |
return false;
|
|
@@ -849,7 +849,7 @@ static bool ggml_metal_supports_op(const struct ggml_metal_context * ctx, const
|
|
| 849 |
}
|
| 850 |
|
| 851 |
static enum ggml_status ggml_metal_graph_compute(
|
| 852 |
-
struct
|
| 853 |
struct ggml_cgraph * gf) {
|
| 854 |
|
| 855 |
@autoreleasepool {
|
|
@@ -3178,7 +3178,7 @@ GGML_CALL static const char * ggml_backend_metal_name(ggml_backend_t backend) {
|
|
| 3178 |
}
|
| 3179 |
|
| 3180 |
GGML_CALL static void ggml_backend_metal_free(ggml_backend_t backend) {
|
| 3181 |
-
struct
|
| 3182 |
ggml_metal_free(ctx);
|
| 3183 |
free(backend);
|
| 3184 |
}
|
|
@@ -3190,13 +3190,13 @@ GGML_CALL static ggml_backend_buffer_type_t ggml_backend_metal_get_default_buffe
|
|
| 3190 |
}
|
| 3191 |
|
| 3192 |
GGML_CALL static enum ggml_status ggml_backend_metal_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
|
| 3193 |
-
struct
|
| 3194 |
|
| 3195 |
return ggml_metal_graph_compute(metal_ctx, cgraph);
|
| 3196 |
}
|
| 3197 |
|
| 3198 |
GGML_CALL static bool ggml_backend_metal_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
|
| 3199 |
-
struct
|
| 3200 |
|
| 3201 |
return ggml_metal_supports_op(metal_ctx, op);
|
| 3202 |
}
|
|
@@ -3241,9 +3241,9 @@ static ggml_guid_t ggml_backend_metal_guid(void) {
|
|
| 3241 |
}
|
| 3242 |
|
| 3243 |
ggml_backend_t ggml_backend_metal_init(void) {
|
| 3244 |
-
struct
|
| 3245 |
-
|
| 3246 |
if (ctx == NULL) {
|
|
|
|
| 3247 |
return NULL;
|
| 3248 |
}
|
| 3249 |
|
|
@@ -3265,7 +3265,7 @@ bool ggml_backend_is_metal(ggml_backend_t backend) {
|
|
| 3265 |
void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb) {
|
| 3266 |
GGML_ASSERT(ggml_backend_is_metal(backend));
|
| 3267 |
|
| 3268 |
-
struct
|
| 3269 |
|
| 3270 |
ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS);
|
| 3271 |
}
|
|
@@ -3273,7 +3273,7 @@ void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb) {
|
|
| 3273 |
void ggml_backend_metal_set_abort_callback(ggml_backend_t backend, ggml_abort_callback abort_callback, void * user_data) {
|
| 3274 |
GGML_ASSERT(ggml_backend_is_metal(backend));
|
| 3275 |
|
| 3276 |
-
struct
|
| 3277 |
|
| 3278 |
ctx->abort_callback = abort_callback;
|
| 3279 |
ctx->abort_callback_data = user_data;
|
|
@@ -3282,7 +3282,7 @@ void ggml_backend_metal_set_abort_callback(ggml_backend_t backend, ggml_abort_ca
|
|
| 3282 |
bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family) {
|
| 3283 |
GGML_ASSERT(ggml_backend_is_metal(backend));
|
| 3284 |
|
| 3285 |
-
struct
|
| 3286 |
|
| 3287 |
return [ctx->device supportsFamily:(MTLGPUFamilyApple1 + family - 1)];
|
| 3288 |
}
|
|
@@ -3290,7 +3290,7 @@ bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family) {
|
|
| 3290 |
void ggml_backend_metal_capture_next_compute(ggml_backend_t backend) {
|
| 3291 |
GGML_ASSERT(ggml_backend_is_metal(backend));
|
| 3292 |
|
| 3293 |
-
struct
|
| 3294 |
ctx->should_capture_next_compute = true;
|
| 3295 |
}
|
| 3296 |
|
|
|
|
| 210 |
GGML_METAL_KERNEL_TYPE_COUNT
|
| 211 |
};
|
| 212 |
|
| 213 |
+
struct ggml_backend_metal_context {
|
| 214 |
int n_cb;
|
| 215 |
|
| 216 |
id<MTLDevice> device;
|
|
|
|
| 293 |
return data;
|
| 294 |
}
|
| 295 |
|
| 296 |
+
static struct ggml_backend_metal_context * ggml_metal_init(int n_cb) {
|
| 297 |
GGML_METAL_LOG_INFO("%s: allocating\n", __func__);
|
| 298 |
|
| 299 |
#if TARGET_OS_OSX && !GGML_METAL_NDEBUG
|
|
|
|
| 310 |
GGML_METAL_LOG_INFO("%s: picking default device: %s\n", __func__, [[device name] UTF8String]);
|
| 311 |
|
| 312 |
// Configure context
|
| 313 |
+
struct ggml_backend_metal_context * ctx = malloc(sizeof(struct ggml_backend_metal_context));
|
| 314 |
ctx->device = device;
|
| 315 |
ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS);
|
| 316 |
ctx->queue = [ctx->device newCommandQueue];
|
|
|
|
| 672 |
return ctx;
|
| 673 |
}
|
| 674 |
|
| 675 |
+
static void ggml_metal_free(struct ggml_backend_metal_context * ctx) {
|
| 676 |
GGML_METAL_LOG_INFO("%s: deallocating\n", __func__);
|
| 677 |
|
| 678 |
for (int i = 0; i < GGML_METAL_KERNEL_TYPE_COUNT; ++i) {
|
|
|
|
| 738 |
return nil;
|
| 739 |
}
|
| 740 |
|
| 741 |
+
static bool ggml_metal_supports_op(const struct ggml_backend_metal_context * ctx, const struct ggml_tensor * op) {
|
| 742 |
for (size_t i = 0, n = 3; i < n; ++i) {
|
| 743 |
if (op->src[i] != NULL && op->src[i]->type == GGML_TYPE_BF16) {
|
| 744 |
return false;
|
|
|
|
| 849 |
}
|
| 850 |
|
| 851 |
static enum ggml_status ggml_metal_graph_compute(
|
| 852 |
+
struct ggml_backend_metal_context * ctx,
|
| 853 |
struct ggml_cgraph * gf) {
|
| 854 |
|
| 855 |
@autoreleasepool {
|
|
|
|
| 3178 |
}
|
| 3179 |
|
| 3180 |
GGML_CALL static void ggml_backend_metal_free(ggml_backend_t backend) {
|
| 3181 |
+
struct ggml_backend_metal_context * ctx = (struct ggml_backend_metal_context *)backend->context;
|
| 3182 |
ggml_metal_free(ctx);
|
| 3183 |
free(backend);
|
| 3184 |
}
|
|
|
|
| 3190 |
}
|
| 3191 |
|
| 3192 |
GGML_CALL static enum ggml_status ggml_backend_metal_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
|
| 3193 |
+
struct ggml_backend_metal_context * metal_ctx = (struct ggml_backend_metal_context *)backend->context;
|
| 3194 |
|
| 3195 |
return ggml_metal_graph_compute(metal_ctx, cgraph);
|
| 3196 |
}
|
| 3197 |
|
| 3198 |
GGML_CALL static bool ggml_backend_metal_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
|
| 3199 |
+
struct ggml_backend_metal_context * metal_ctx = (struct ggml_backend_metal_context *)backend->context;
|
| 3200 |
|
| 3201 |
return ggml_metal_supports_op(metal_ctx, op);
|
| 3202 |
}
|
|
|
|
| 3241 |
}
|
| 3242 |
|
| 3243 |
ggml_backend_t ggml_backend_metal_init(void) {
|
| 3244 |
+
struct ggml_backend_metal_context * ctx = ggml_metal_init(GGML_DEFAULT_N_THREADS);
|
|
|
|
| 3245 |
if (ctx == NULL) {
|
| 3246 |
+
GGML_METAL_LOG_ERROR("%s: error: failed to allocate context\n", __func__);
|
| 3247 |
return NULL;
|
| 3248 |
}
|
| 3249 |
|
|
|
|
| 3265 |
void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb) {
|
| 3266 |
GGML_ASSERT(ggml_backend_is_metal(backend));
|
| 3267 |
|
| 3268 |
+
struct ggml_backend_metal_context * ctx = (struct ggml_backend_metal_context *)backend->context;
|
| 3269 |
|
| 3270 |
ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS);
|
| 3271 |
}
|
|
|
|
| 3273 |
void ggml_backend_metal_set_abort_callback(ggml_backend_t backend, ggml_abort_callback abort_callback, void * user_data) {
|
| 3274 |
GGML_ASSERT(ggml_backend_is_metal(backend));
|
| 3275 |
|
| 3276 |
+
struct ggml_backend_metal_context * ctx = (struct ggml_backend_metal_context *)backend->context;
|
| 3277 |
|
| 3278 |
ctx->abort_callback = abort_callback;
|
| 3279 |
ctx->abort_callback_data = user_data;
|
|
|
|
| 3282 |
bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family) {
|
| 3283 |
GGML_ASSERT(ggml_backend_is_metal(backend));
|
| 3284 |
|
| 3285 |
+
struct ggml_backend_metal_context * ctx = (struct ggml_backend_metal_context *)backend->context;
|
| 3286 |
|
| 3287 |
return [ctx->device supportsFamily:(MTLGPUFamilyApple1 + family - 1)];
|
| 3288 |
}
|
|
|
|
| 3290 |
void ggml_backend_metal_capture_next_compute(ggml_backend_t backend) {
|
| 3291 |
GGML_ASSERT(ggml_backend_is_metal(backend));
|
| 3292 |
|
| 3293 |
+
struct ggml_backend_metal_context * ctx = (struct ggml_backend_metal_context *)backend->context;
|
| 3294 |
ctx->should_capture_next_compute = true;
|
| 3295 |
}
|
| 3296 |
|