70 lines
2.7 KiB
Python
70 lines
2.7 KiB
Python
import re
|
|
import matplotlib.pyplot as plt
|
|
|
|
# Define the PerformanceMetrics class
|
|
class PerformanceMetrics:
|
|
def __init__(self, l1d_tlb_rd, l2d_tlb_rd, l1d_tlb_refill, cpu_cycles, dtlb_walk, stall_backend, ll_cache_miss_rd):
|
|
self.l1d_tlb_rd = l1d_tlb_rd
|
|
self.l2d_tlb_rd = l2d_tlb_rd
|
|
self.l1d_tlb_refill = l1d_tlb_refill
|
|
self.cpu_cycles = cpu_cycles
|
|
self.dtlb_walk = dtlb_walk
|
|
self.stall_backend = stall_backend
|
|
self.ll_cache_miss_rd = ll_cache_miss_rd
|
|
|
|
def __repr__(self):
|
|
return (f"PerformanceMetrics(l1d_tlb_rd={self.l1d_tlb_rd}, l2d_tlb_rd={self.l2d_tlb_rd}, "
|
|
f"l1d_tlb_refill={self.l1d_tlb_refill}, cpu_cycles={self.cpu_cycles}, "
|
|
f"dtlb_walk={self.dtlb_walk}, stall_backend={self.stall_backend}, "
|
|
f"ll_cache_miss_rd={self.ll_cache_miss_rd})")
|
|
|
|
def extract_headers_and_values(input_text):
|
|
lines = input_text.strip().split('\n')
|
|
headers = re.split(r'\s+', lines[0].strip('#').strip())
|
|
values = [list(map(int, re.split(r'\s+', line.strip()))) for line in lines[1:]]
|
|
return headers, values
|
|
|
|
def create_performance_metrics(values):
|
|
return [PerformanceMetrics(*value_set) for value_set in values]
|
|
|
|
def transpose_values(metrics):
|
|
return list(zip(*[[
|
|
metric.l1d_tlb_rd,
|
|
metric.l2d_tlb_rd,
|
|
metric.l1d_tlb_refill,
|
|
metric.cpu_cycles,
|
|
metric.dtlb_walk,
|
|
metric.stall_backend,
|
|
metric.ll_cache_miss_rd
|
|
] for metric in metrics]))
|
|
|
|
def plot_metrics(headers, transposed_values):
|
|
num_metrics = len(headers)
|
|
fig, axes = plt.subplots(num_metrics, 1, figsize=(12, 3*num_metrics), sharex=True)
|
|
|
|
for i, (ax, header) in enumerate(zip(axes, headers)):
|
|
ax.plot(transposed_values[i])
|
|
ax.set_title(header)
|
|
ax.set_ylabel('Value')
|
|
ax.grid(True)
|
|
|
|
plt.xlabel('Sample Index')
|
|
plt.tight_layout()
|
|
plt.show()
|
|
|
|
def main(input_text):
|
|
headers, values = extract_headers_and_values(input_text)
|
|
metrics = create_performance_metrics(values)
|
|
for metric in metrics:
|
|
print(metric)
|
|
transposed_values = transpose_values(metrics)
|
|
plot_metrics(headers, transposed_values)
|
|
|
|
# Input text
|
|
input_text = """# p/l1d_tlb_rd p/l2d_tlb_rd p/l1d_tlb_refill p/cpu_cycles p/dtlb_walk p/stall_backend p/ll_cache_miss_rd
|
|
0 0 0 0 0 0 0
|
|
2337052346 141483 140443 4312946424 132736 1198102014 5435801
|
|
1596637344 93704 57709 2911064777 53544 794993953 3666801"""
|
|
|
|
# Run the main function
|
|
main(input_text) |