Skip to content

Commit 318600f

Browse files
committed
feat: load all backends from a user-provided search path
1 parent c5ede38 commit 318600f

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

ggml/include/ggml-backend.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ extern "C" {
228228
GGML_API void ggml_backend_unload(ggml_backend_reg_t reg);
229229
// Load all known backends from dynamic libraries
230230
GGML_API void ggml_backend_load_all(void);
231+
GGML_API void ggml_backend_load_all_in_search_path(const char * search_path);
231232

232233
//
233234
// Backend scheduler

ggml/src/ggml-backend-reg.cpp

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -449,11 +449,17 @@ static std::string backend_filename_suffix() {
449449
#endif
450450
}
451451

452-
static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent) {
452+
static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent, const char * user_search_path) {
453453
// enumerate all the files that match [lib]ggml-name-*.[so|dll] in the search paths
454454
// TODO: search system paths
455-
std::vector<std::string> search_paths = { "./", get_executable_path() };
456455
std::string file_prefix = backend_filename_prefix() + name + "-";
456+
std::vector<std::string> search_paths;
457+
if (user_search_path == NULL) {
458+
search_paths.push_back("./");
459+
search_paths.push_back(get_executable_path());
460+
} else {
461+
search_paths.push_back(std::string(user_search_path) + "/");
462+
}
457463

458464
int best_score = 0;
459465
std::string best_path;
@@ -509,21 +515,25 @@ static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent)
509515
}
510516

511517
void ggml_backend_load_all() {
518+
ggml_backend_load_all_in_search_path(NULL);
519+
}
520+
521+
void ggml_backend_load_all_in_search_path(const char * search_path) {
512522
#ifdef NDEBUG
513523
bool silent = true;
514524
#else
515525
bool silent = false;
516526
#endif
517527

518-
ggml_backend_load_best("blas", silent);
519-
ggml_backend_load_best("cann", silent);
520-
ggml_backend_load_best("cuda", silent);
521-
ggml_backend_load_best("hip", silent);
522-
ggml_backend_load_best("kompute", silent);
523-
ggml_backend_load_best("metal", silent);
524-
ggml_backend_load_best("rpc", silent);
525-
ggml_backend_load_best("sycl", silent);
526-
ggml_backend_load_best("vulkan", silent);
527-
ggml_backend_load_best("musa", silent);
528-
ggml_backend_load_best("cpu", silent);
528+
ggml_backend_load_best("blas", silent, search_path);
529+
ggml_backend_load_best("cann", silent, search_path);
530+
ggml_backend_load_best("cuda", silent, search_path);
531+
ggml_backend_load_best("hip", silent, search_path);
532+
ggml_backend_load_best("kompute", silent, search_path);
533+
ggml_backend_load_best("metal", silent, search_path);
534+
ggml_backend_load_best("rpc", silent, search_path);
535+
ggml_backend_load_best("sycl", silent, search_path);
536+
ggml_backend_load_best("vulkan", silent, search_path);
537+
ggml_backend_load_best("musa", silent, search_path);
538+
ggml_backend_load_best("cpu", silent, search_path);
529539
}

0 commit comments

Comments
 (0)