Commit d2e54583c for llama.cpp
commit d2e54583c7452353eb35d40431281f6ee984332f
Author: Masashi Yoshimura <yoshimura.masashi.frbs@gmail.com>
Date: Thu Sep 24 05:27:27 2026 +0900
tests: add `-b/--backend` option to test-llama-archs for testing a specific backend (#27372)
* tests: add backend option to test-llama-archs
* Update tests/test-llama-archs.cpp
Co-authored-by: Johannes Gäßler <johannesg@5d6.de>
* remove extra space
---------
Co-authored-by: Johannes Gäßler <johannesg@5d6.de>
diff --git a/tests/test-llama-archs.cpp b/tests/test-llama-archs.cpp
index 488770297..27d00b0df 100644
--- a/tests/test-llama-archs.cpp
+++ b/tests/test-llama-archs.cpp
@@ -93,6 +93,7 @@ static void usage(char ** argv) {
LOG(" -d, --stdev <stdev> Set the standard deviation of the tensor initialization distribution (default: 0.1f)\n");
LOG(" -o, --out <dir> Save generated test models to <dir> instead of running backend tests\n");
LOG(" -v <N> Set log verbosity level\n");
+ LOG(" -b, --backend <backend> Run only on the given backend device\n");
LOG(" -h, --help Show this help message\n\n");
LOG("Examples:\n");
LOG(" %s\n", argv[0]);
@@ -704,7 +705,7 @@ static int save_models(const std::string & arch_filter, const size_t seed, const
return 0;
}
-static int test_backends(const std::string & arch_filter, const size_t seed, const float stdev, const int verbosity) {
+static int test_backends(const std::string & arch_filter, const size_t seed, const float stdev, const int verbosity, const char * target_backend) {
struct user_data_t {
struct {
ggml_log_callback callback;
@@ -746,6 +747,9 @@ static int test_backends(const std::string & arch_filter, const size_t seed, con
const size_t device_count = ggml_backend_dev_count();
for (size_t i = 0; i < device_count; i++) {
ggml_backend_dev_t dev = ggml_backend_dev_get(i);
+ if (target_backend != nullptr && strcmp(target_backend, ggml_backend_dev_name(dev)) != 0) {
+ continue;
+ }
dev_configs.emplace_back(std::vector<ggml_backend_dev_t>{dev}, ggml_backend_dev_description(dev), LLAMA_SPLIT_MODE_LAYER);
max_device_label_length = std::max(max_device_label_length, dev_configs.back().label.length());
@@ -756,7 +760,9 @@ static int test_backends(const std::string & arch_filter, const size_t seed, con
}
}
- dev_configs.emplace_back(devices_meta, "Meta", LLAMA_SPLIT_MODE_TENSOR);
+ if (target_backend == nullptr) {
+ dev_configs.emplace_back(devices_meta, "Meta", LLAMA_SPLIT_MODE_TENSOR);
+ }
}
size_t max_arch_name_length = 0;
@@ -907,6 +913,7 @@ int main(int argc, char ** argv) {
size_t seed = rd();
float stdev = 0.1f;
std::string out;
+ const char * target_backend = nullptr;
int verbosity = LOG_LEVEL_ERROR;
@@ -961,6 +968,19 @@ int main(int argc, char ** argv) {
usage(argv);
return 1;
}
+ } else if (strcmp(argv[i], "-b") == 0 || strcmp(argv[i], "--backend") == 0) {
+ if (i + 1 < argc) {
+ const char * backend_name = argv[++i];
+ ggml_backend_dev_t dev = ggml_backend_dev_by_name(backend_name);
+ if (dev == nullptr) {
+ LOG_ERR("%s: unknown backend device: %s\n", __func__, backend_name);
+ return 1;
+ }
+ target_backend = ggml_backend_dev_name(dev);
+ } else {
+ usage(argv);
+ return 1;
+ }
} else {
LOG_ERR("%s: unknown argument: %s\n", __func__, argv[i]);
usage(argv);
@@ -977,7 +997,7 @@ int main(int argc, char ** argv) {
if (!out.empty()) {
return save_models(arch_filter, seed, stdev, verbosity, out);
}
- return test_backends(arch_filter, seed, stdev, verbosity);
+ return test_backends(arch_filter, seed, stdev, verbosity, target_backend);
} catch (const std::exception & err) {
fprintf(stderr, "encountered runtime error: %s\n", err.what());
return -1;