@@ -323,37 +323,43 @@ struct clip_ctx {
323323 std::vector<ggml_backend_t > backend_ptrs;
324324 std::vector<ggml_backend_buffer_type_t > backend_buft;
325325
326- ggml_backend_ptr backend;
327- ggml_backend_ptr backend_cpu;
326+ ggml_backend_t backend;
327+ ggml_backend_t backend_cpu;
328328 ggml_backend_buffer_ptr buf;
329329
330330 ggml_backend_sched_ptr sched;
331331
332332 clip_image_size load_image_size;
333333
334334 clip_ctx (clip_context_params & ctx_params) {
335- backend_cpu = ggml_backend_ptr ( ggml_backend_init_by_type (GGML_BACKEND_DEVICE_TYPE_CPU, nullptr ) );
336- backend = ggml_backend_ptr ( ctx_params.use_gpu
335+ backend_cpu = ggml_backend_init_by_type (GGML_BACKEND_DEVICE_TYPE_CPU, nullptr );
336+ backend = ctx_params.use_gpu
337337 ? ggml_backend_init_by_type (GGML_BACKEND_DEVICE_TYPE_GPU, nullptr )
338- : nullptr ) ;
338+ : nullptr ;
339339
340- ggml_backend_t backend_cpu_raw_ptr = backend_cpu.get ();
341340 if (backend) {
342- LOG_INF (" %s: CLIP using %s backend\n " , __func__, ggml_backend_name (backend. get () ));
343- backend_ptrs.push_back (backend. get () );
344- backend_buft.push_back (ggml_backend_get_default_buffer_type (backend. get () ));
341+ LOG_INF (" %s: CLIP using %s backend\n " , __func__, ggml_backend_name (backend));
342+ backend_ptrs.push_back (backend);
343+ backend_buft.push_back (ggml_backend_get_default_buffer_type (backend));
345344 } else {
346- backend = std::move ( backend_cpu) ;
345+ backend = backend_cpu;
347346 LOG_INF (" %s: CLIP using CPU backend\n " , __func__);
348347 }
349348
350- backend_ptrs.push_back (backend_cpu_raw_ptr );
351- backend_buft.push_back (ggml_backend_get_default_buffer_type (backend_cpu_raw_ptr ));
349+ backend_ptrs.push_back (backend );
350+ backend_buft.push_back (ggml_backend_get_default_buffer_type (backend_cpu ));
352351
353352 sched.reset (
354353 ggml_backend_sched_new (backend_ptrs.data (), backend_buft.data (), backend_ptrs.size (), 8192 , false )
355354 );
356355 }
356+
357+ ~clip_ctx () {
358+ ggml_backend_free (backend);
359+ if (backend != backend_cpu) {
360+ ggml_backend_free (backend_cpu);
361+ }
362+ }
357363};
358364
359365static ggml_cgraph * clip_image_build_graph_siglip (clip_ctx * ctx, const clip_image_f32_batch & imgs) {
@@ -1429,7 +1435,7 @@ struct clip_model_loader {
14291435 }
14301436
14311437 // alloc memory and offload data
1432- ggml_backend_buffer_type_t buft = ggml_backend_get_default_buffer_type (ctx_clip.backend . get () );
1438+ ggml_backend_buffer_type_t buft = ggml_backend_get_default_buffer_type (ctx_clip.backend );
14331439 ctx_clip.buf .reset (ggml_backend_alloc_ctx_tensors_from_buft (ctx_clip.ctx_data .get (), buft));
14341440 ggml_backend_buffer_set_usage (ctx_clip.buf .get (), GGML_BACKEND_BUFFER_USAGE_WEIGHTS);
14351441 for (auto & t : tensors_to_load) {
@@ -2611,9 +2617,7 @@ bool clip_image_batch_encode(clip_ctx * ctx, const int n_threads, const clip_ima
26112617 }
26122618 }
26132619
2614- ggml_backend_t cpu_backend_raw_ptr =
2615- ggml_backend_is_cpu (ctx->backend .get ()) ? ctx->backend .get () : ctx->backend_cpu .get ();
2616- ggml_backend_cpu_set_n_threads (cpu_backend_raw_ptr, n_threads);
2620+ ggml_backend_cpu_set_n_threads (ctx->backend_cpu , n_threads);
26172621
26182622 auto status = ggml_backend_sched_graph_compute (ctx->sched .get (), gf);
26192623 if (status != GGML_STATUS_SUCCESS) {
0 commit comments