Files
DRAMSys/scripts/simulation/example_ddr3_simulations.py

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()