85 lines
2.1 KiB
Python
Executable File
85 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
from pathlib import Path
|
|
from dataclasses import dataclass
|
|
from simulation import (
|
|
Simulation,
|
|
ConfigTokens,
|
|
get_argparser,
|
|
get_options,
|
|
simulation_results,
|
|
)
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
SCRIPT_DIRECTORY = Path(__file__).parent.resolve()
|
|
DEFAULT_BASE_CONFIG = SCRIPT_DIRECTORY / "example_ddr3_simulations.json"
|
|
|
|
simulations: list[Simulation] = []
|
|
|
|
@dataclass(frozen=True)
|
|
class SchedulerBuffer:
|
|
buffer: str
|
|
size: int
|
|
|
|
|
|
refresh_policies = ["NoRefresh", "AllBank"]
|
|
patterns = ["sequential", "random"]
|
|
scheduler_buffers = [
|
|
SchedulerBuffer("Bankwise", 8),
|
|
SchedulerBuffer("Bankwise", 16),
|
|
]
|
|
|
|
for refresh_policy in refresh_policies:
|
|
for scheduler_buffer in scheduler_buffers:
|
|
for pattern in patterns:
|
|
PAGE_POLICY = "Open" if pattern == "sequential" else "Closed"
|
|
|
|
config_tokens = ConfigTokens(
|
|
f"{refresh_policy}_{scheduler_buffer.buffer}_{scheduler_buffer.size}_{pattern}",
|
|
{
|
|
"refresh_policy": refresh_policy,
|
|
"pattern": pattern,
|
|
"page_policy": PAGE_POLICY,
|
|
"scheduler_buffer": scheduler_buffer.buffer,
|
|
"scheduler_buffer_size": scheduler_buffer.size,
|
|
},
|
|
)
|
|
|
|
simulations.append(Simulation(config_tokens))
|
|
|
|
|
|
parser = get_argparser()
|
|
options = get_options(parser.parse_args())
|
|
|
|
if options.base_config is None:
|
|
options.base_config = DEFAULT_BASE_CONFIG
|
|
|
|
df = simulation_results(options, simulations)
|
|
|
|
# Generate interesting plots!
|
|
for name, data in df.group_by("refresh_policy", "scheduler_buffer_size", maintain_order=True):
|
|
plt.figure(figsize=(8.0, 12.0))
|
|
|
|
plt.bar(
|
|
"pattern",
|
|
"bandwidth",
|
|
data=data,
|
|
)
|
|
|
|
# Plot MAX bar
|
|
plt.bar(
|
|
"MAX",
|
|
"max_bandwidth",
|
|
data=data,
|
|
color="darkgray",
|
|
)
|
|
|
|
plt.title(name)
|
|
plt.axis(ymin=0, ymax=120)
|
|
plt.xlabel("Access Pattern")
|
|
plt.ylabel("Bandwidth [Gb/s]")
|
|
|
|
plt.savefig(options.out_dir / f"{name}.png")
|
|
plt.close()
|