Skip to content

Commit df35f08

Browse files
authored
Merge pull request #790 from marcusmueller/add_profile_comparator
Add tool to compare profiles
2 parents aec706b + 0fbdc2f commit df35f08

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/bin/env python3
2+
# Copyright 2022, 2025 Marcus Müller
3+
# SPDX-License-Identifier: GPL-3.0
4+
# Takes in a list of volk profiles, ignores empty and identical lines, prints a table of differences.
5+
# Hacky as hell
6+
7+
from sys import argv
8+
9+
10+
def keepline(line: str) -> bool:
11+
if not line:
12+
return False
13+
line = line.strip()
14+
if line.startswith("#"):
15+
return False
16+
return True
17+
18+
19+
def kernel(line: str) -> str:
20+
return line.split(" ")[0]
21+
22+
23+
def impls(line: str) -> tuple[str, str]:
24+
return tuple(line.strip().split(" ")[1:])
25+
26+
27+
machines = [
28+
{kernel(line): impls(line) for line in open(f_name) if keepline(line)}
29+
for f_name in argv[1:]
30+
]
31+
kernels = [set(d.keys()) for d in machines]
32+
common_kernels = [
33+
kernel for kernel in kernels[0] if all((kernel in ks for ks in kernels[1:]))
34+
]
35+
36+
differing_kernels = dict()
37+
for kernel in common_kernels:
38+
first_impl = machines[0][kernel]
39+
if all(machine[kernel] == first_impl for machine in machines[1:]):
40+
continue
41+
differing_kernels[kernel] = {
42+
argv[idx + 1]: machine[kernel] for idx, machine in enumerate(machines)
43+
}
44+
45+
max_kernel_len = max(len(kernel) for kernel in common_kernels)
46+
max_impl_len = max(
47+
max(max(len(alignment) for alignment in impl) for impl in kernel.values())
48+
for kernel in differing_kernels.values()
49+
)
50+
51+
print(
52+
f"|{'Kernel':<{max_kernel_len}}|"
53+
+ "|".join(
54+
f"{fname + ' a':<{max_impl_len}}|{fname + ' u':<{max_impl_len}}"
55+
for fname in argv[1:]
56+
)
57+
+ "|"
58+
)
59+
for kernel, impls in differing_kernels.items():
60+
print(
61+
f"|{kernel:<{max_kernel_len}}|"
62+
+ "|".join(
63+
"|".join(
64+
f"{impl:<{max_impl_len}}" for impl in differing_kernels[kernel][fname]
65+
)
66+
for fname in argv[1:]
67+
)
68+
+ "|"
69+
)

0 commit comments

Comments
 (0)