@@ -570,19 +570,37 @@ static void ggml_graph_compute_helper(std::vector<uint8_t> & buf, ggml_cgraph *
570
570
// llama helpers
571
571
//
572
572
573
+ static inline void * llama_host_malloc (size_t n) {
573
574
#ifdef GGML_USE_CUBLAS
574
- # define llama_host_malloc (n ) ggml_cuda_host_malloc(n)
575
- # define llama_host_free (data ) ggml_cuda_host_free(data)
575
+ if (ggml_cublas_loaded ()) {
576
+ return ggml_cuda_host_malloc (n);
577
+ } else {
578
+ return malloc (n);
579
+ }
580
+ #elif GGML_USE_METAL
581
+ return ggml_metal_host_malloc (n);
582
+ #elif GGML_USE_CPU_HBM
583
+ return hbw_malloc (n)
584
+ #else
585
+ return malloc (n)
586
+ #endif
587
+ }
588
+
589
+ static inline void llama_host_free (void * ptr) {
590
+ #ifdef GGML_USE_CUBLAS
591
+ if (ggml_cublas_loaded ()) {
592
+ return ggml_cuda_host_free (ptr);
593
+ } else {
594
+ return free (ptr);
595
+ }
576
596
#elif GGML_USE_METAL
577
- # define llama_host_malloc (n ) ggml_metal_host_malloc(n)
578
- # define llama_host_free (data ) ggml_metal_host_free(data)
597
+ return ggml_metal_host_free (ptr);
579
598
#elif GGML_USE_CPU_HBM
580
- # define llama_host_malloc (n ) hbw_malloc(n)
581
- # define llama_host_free (data ) if (data != NULL ) hbw_free(data)
599
+ return hbw_free (ptr)
582
600
#else
583
- # define llama_host_malloc (n ) malloc(n)
584
- # define llama_host_free (data ) free(data)
601
+ return free (ptr)
585
602
#endif
603
+ }
586
604
587
605
#if defined(_WIN32)
588
606
static std::string llama_format_win_err (DWORD err) {
@@ -1160,12 +1178,12 @@ struct llama_kv_cache {
1160
1178
ggml_free (ctx);
1161
1179
}
1162
1180
1163
- if (ggml_cpu_has_cublas ()) {
1164
1181
#ifdef GGML_USE_CUBLAS
1182
+ if (ggml_cublas_loaded ()) {
1165
1183
ggml_cuda_free_data (k);
1166
1184
ggml_cuda_free_data (v);
1167
- #endif
1168
1185
}
1186
+ #endif
1169
1187
}
1170
1188
};
1171
1189
@@ -1264,14 +1282,14 @@ struct llama_model {
1264
1282
ggml_free (ctx);
1265
1283
}
1266
1284
1267
- if (ggml_cpu_has_cublas ()) {
1268
1285
#ifdef GGML_USE_CUBLAS
1286
+ if (ggml_cublas_loaded ()) {
1269
1287
for (size_t i = 0 ; i < tensors_by_name.size (); ++i) {
1270
1288
ggml_cuda_free_data (tensors_by_name[i].second );
1271
1289
}
1272
1290
ggml_cuda_free_scratch ();
1273
- #endif
1274
1291
}
1292
+ #endif
1275
1293
1276
1294
#if defined(GGML_USE_CLBLAST)
1277
1295
for (size_t i = 0 ; i < tensors_by_name.size (); ++i) {
@@ -1386,8 +1404,8 @@ static bool llama_kv_cache_init(
1386
1404
1387
1405
(void ) n_gpu_layers;
1388
1406
1389
- if (ggml_cpu_has_cublas ()) {
1390
1407
#ifdef GGML_USE_CUBLAS
1408
+ if (ggml_cublas_loaded ()) {
1391
1409
size_t vram_kv_cache = 0 ;
1392
1410
1393
1411
if (n_gpu_layers > (int )n_layer + 1 ) {
@@ -1403,8 +1421,8 @@ static bool llama_kv_cache_init(
1403
1421
if (vram_kv_cache > 0 ) {
1404
1422
LLAMA_LOG_INFO (" %s: VRAM kv self = %.2f MB\n " , __func__, vram_kv_cache / 1024.0 / 1024.0 );
1405
1423
}
1406
- #endif
1407
1424
}
1425
+ #endif
1408
1426
1409
1427
return true ;
1410
1428
}
@@ -2468,19 +2486,19 @@ static void llm_load_tensors(
2468
2486
enum ggml_backend_type llama_backend_offload = GGML_BACKEND_CPU;
2469
2487
enum ggml_backend_type llama_backend_offload_split = GGML_BACKEND_CPU;
2470
2488
2471
- if (ggml_cpu_has_cublas ()) {
2472
2489
#ifdef GGML_USE_CUBLAS
2490
+ if (ggml_cublas_loaded ()) {
2473
2491
LLAMA_LOG_INFO (" %s: using " GGML_CUDA_NAME " for GPU acceleration\n " , __func__);
2474
2492
ggml_cuda_set_main_device (main_gpu);
2475
2493
2476
2494
llama_backend_offload = GGML_BACKEND_GPU;
2477
2495
llama_backend_offload_split = GGML_BACKEND_GPU_SPLIT;
2478
- # endif
2479
- } else if ( ggml_cpu_has_clblast ()) {
2496
+ }
2497
+ # elif GGML_USE_CLBLAST
2480
2498
LLAMA_LOG_INFO (" %s: using OpenCL for GPU acceleration\n " , __func__);
2481
2499
llama_backend_offload = GGML_BACKEND_GPU;
2482
2500
llama_backend_offload_split = GGML_BACKEND_GPU;
2483
- }
2501
+ # endif
2484
2502
2485
2503
// prepare memory for the weights
2486
2504
size_t vram_weights = 0 ;
0 commit comments