Skip to content

Commit 43041d2

Browse files
giladgdslaren
andauthored
ggml: load all backends from a user-provided search path (#10699)
* feat: load all backends from a user-provided search path * fix: Windows search path * refactor: rename `ggml_backend_load_all_in_search_path` to `ggml_backend_load_all_from_path` * refactor: rename `search_path` to `dir_path` * fix: change `NULL` to `nullptr` Co-authored-by: Diego Devesa <[email protected]> * fix: change `NULL` to `nullptr` --------- Co-authored-by: Diego Devesa <[email protected]>
1 parent b685daf commit 43041d2

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

ggml/include/ggml-backend.h

+1
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_from_path(const char * dir_path);
231232

232233
//
233234
// Backend scheduler

ggml/src/ggml-backend-reg.cpp

+27-13
Original file line numberDiff line numberDiff line change
@@ -449,11 +449,21 @@ 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 == nullptr) {
458+
search_paths.push_back("./");
459+
search_paths.push_back(get_executable_path());
460+
} else {
461+
#if defined(_WIN32)
462+
search_paths.push_back(std::string(user_search_path) + "\\");
463+
#else
464+
search_paths.push_back(std::string(user_search_path) + "/");
465+
#endif
466+
}
457467

458468
int best_score = 0;
459469
std::string best_path;
@@ -509,21 +519,25 @@ static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent)
509519
}
510520

511521
void ggml_backend_load_all() {
522+
ggml_backend_load_all_from_path(nullptr);
523+
}
524+
525+
void ggml_backend_load_all_from_path(const char * dir_path) {
512526
#ifdef NDEBUG
513527
bool silent = true;
514528
#else
515529
bool silent = false;
516530
#endif
517531

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);
532+
ggml_backend_load_best("blas", silent, dir_path);
533+
ggml_backend_load_best("cann", silent, dir_path);
534+
ggml_backend_load_best("cuda", silent, dir_path);
535+
ggml_backend_load_best("hip", silent, dir_path);
536+
ggml_backend_load_best("kompute", silent, dir_path);
537+
ggml_backend_load_best("metal", silent, dir_path);
538+
ggml_backend_load_best("rpc", silent, dir_path);
539+
ggml_backend_load_best("sycl", silent, dir_path);
540+
ggml_backend_load_best("vulkan", silent, dir_path);
541+
ggml_backend_load_best("musa", silent, dir_path);
542+
ggml_backend_load_best("cpu", silent, dir_path);
529543
}

0 commit comments

Comments
 (0)