| 4685 | } |
| 4686 | |
| 4687 | int main(int argc, char ** argv) { |
| 4688 | test_mode mode = MODE_TEST; |
| 4689 | const char * op_name_filter = nullptr; |
| 4690 | const char * backend_filter = nullptr; |
| 4691 | const char * params_filter = nullptr; |
| 4692 | |
| 4693 | for (int i = 1; i < argc; i++) { |
| 4694 | if (strcmp(argv[i], "test") == 0) { |
| 4695 | mode = MODE_TEST; |
| 4696 | } else if (strcmp(argv[i], "perf") == 0) { |
| 4697 | mode = MODE_PERF; |
| 4698 | } else if (strcmp(argv[i], "grad") == 0) { |
| 4699 | mode = MODE_GRAD; |
| 4700 | } else if (strcmp(argv[i], "-o") == 0) { |
| 4701 | if (i + 1 < argc) { |
| 4702 | op_name_filter = argv[++i]; |
| 4703 | } else { |
| 4704 | usage(argv); |
| 4705 | return 1; |
| 4706 | } |
| 4707 | } else if (strcmp(argv[i], "-b") == 0) { |
| 4708 | if (i + 1 < argc) { |
| 4709 | backend_filter = argv[++i]; |
| 4710 | } else { |
| 4711 | usage(argv); |
| 4712 | return 1; |
| 4713 | } |
| 4714 | } else if (strcmp(argv[i], "-p") == 0) { |
| 4715 | if (i + 1 < argc) { |
| 4716 | params_filter = argv[++i]; |
| 4717 | } else { |
| 4718 | usage(argv); |
| 4719 | return 1; |
| 4720 | } |
| 4721 | } else { |
| 4722 | usage(argv); |
| 4723 | return 1; |
| 4724 | } |
| 4725 | } |
| 4726 | |
| 4727 | // load and enumerate backends |
| 4728 | ggml_backend_load_all(); |
| 4729 | |
| 4730 | printf("Testing %zu devices\n\n", ggml_backend_dev_count()); |
| 4731 | |
| 4732 | size_t n_ok = 0; |
| 4733 | |
| 4734 | for (size_t i = 0; i < ggml_backend_dev_count(); i++) { |
| 4735 | ggml_backend_dev_t dev = ggml_backend_dev_get(i); |
| 4736 | |
| 4737 | printf("Backend %zu/%zu: %s\n", i + 1, ggml_backend_dev_count(), ggml_backend_dev_name(dev)); |
| 4738 | |
| 4739 | if (backend_filter != NULL && strcmp(backend_filter, ggml_backend_dev_name(dev)) != 0) { |
| 4740 | printf(" Skipping\n"); |
| 4741 | n_ok++; |
| 4742 | continue; |
| 4743 | } |
| 4744 |
nothing calls this directly
no test coverage detected