void ggml_metal_free(struct ggml_metal_context * ctx) {
fprintf(stderr, "%s: deallocating\n", __func__);
-
+ for (int i = 0; i < ctx->n_buffers; ++i) {
+ [ctx->buffers[i].metal release];
+ }
free(ctx);
}
struct llama_context {
llama_context(const llama_model & model, const llama_vocab & vocab) : model(model), vocab(vocab), t_load_us(model.t_load_us), t_start_us(model.t_start_us) {}
-
+#ifdef GGML_USE_METAL
+ ~llama_context() {
+ if (ctx_metal) {
+ ggml_metal_free(ctx_metal);
+ }
+ }
+#endif
std::mt19937 rng;
bool has_evaluated_once = false;