KleidiAI Coverage Report


Directory: ./
File: benchmark/main.cpp
Date: 2025-10-20 13:18:31
Coverage Exec Excl Total
Lines: 61.8% 34 0 55
Functions: 50.0% 1 0 2
Branches: 27.8% 22 0 79

Line Branch Exec Source
1 //
2 // SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
3 //
4 // SPDX-License-Identifier: Apache-2.0
5 //
6
7 #include <unistd.h>
8
9 #include <cstdlib>
10 #include <iostream>
11 #include <sstream>
12
13 #include "benchmark/matmul/matmul_registry.hpp"
14 #include "kai/kai_common.h"
15
16 #ifdef __GNUC__
17 #pragma GCC diagnostic push
18 #pragma GCC diagnostic ignored "-Wswitch-default"
19 #endif // __GNUC__
20
21 #include <benchmark/benchmark.h>
22
23 #ifdef __GNUC__
24 #pragma GCC diagnostic pop
25 #endif // __GNUC__
26
27 namespace {
28 void print_usage(char* name) {
29 std::ostringstream oss;
30 oss << "Usage:\n";
31 oss << "\t" << name << " -m 13 -n 17 -k 18 -b 32\n";
32 oss << "Options:\n";
33 oss << "\t-m,-n,-k";
34 oss << "\tMatrix dimensions\n";
35 oss << "\t-b";
36 oss << "\t\t\t(Optional) Block size for blockwise quantization\n";
37 oss << "For additional options:\n";
38 oss << "\t--help\n";
39 std::cerr << oss.str() << "\n";
40 }
41 } // namespace
42
43 1 int main(int argc, char** argv) {
44 1 ::benchmark::Initialize(&argc, argv);
45
46 1 std::ostringstream oss;
47
4/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
1 oss << "KleidiAI version: v" << kai_get_version() << "\n";
48
49 1 bool mflag = false;
50 1 bool nflag = false;
51 1 bool kflag = false;
52 1 bool bflag = false;
53
54 1 size_t m = 1;
55 1 size_t n = 1;
56 1 size_t k = 1;
57 1 size_t bl = 32;
58
59 1 int opt;
60
3/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 1 time.
4 while ((opt = getopt(argc, argv, "m:n:k:b:")) != -1) {
61
3/5
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
3 switch (opt) {
62 case 'm':
63
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1 m = atoi(optarg);
64 1 mflag = true;
65 1 break;
66 case 'n':
67
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1 n = atoi(optarg);
68 1 nflag = true;
69 1 break;
70 case 'k':
71
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1 k = atoi(optarg);
72 1 kflag = true;
73 1 break;
74 case 'b':
75 bl = atoi(optarg);
76 bflag = true;
77 break;
78 case '?':
79 // Fallthrough
80 default:
81 print_usage(argv[0]);
82 exit(EXIT_FAILURE);
83 }
84 }
85
86 1 if (!mflag || !nflag || !kflag) {
87 print_usage(argv[0]);
88 exit(EXIT_FAILURE);
89 }
90
91
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1 if (!bflag) {
92
3/6
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
1 oss << "Optional argument -b not specified. Defaulting to block size " << bl << "\n";
93 1 }
94
2/4
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
1 std::cerr << oss.str();
95
96
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1 kai::benchmark::RegisterMatMulBenchmarks({m, n, k}, bl);
97
98
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1 ::benchmark::RunSpecifiedBenchmarks();
99
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1 ::benchmark::Shutdown();
100 1 return 0;
101 1 }
102