baseline_ipc = 0.0
baseline_stats_file = "/workspaces/2024/materials/02-Using-gem5/09-sampling/01-simpoint/complete/full-detailed-run-m5out/stats.txt"

with open(baseline_stats_file, "r") as f:
    for line in f:
        if "board.processor.cores.core.ipc" in line:
            line = line.split()
            baseline_ipc = float(line[1])
            break

num_simpoints = 3
simpoint_ipcs = []
simpoint_weights = []

for i in range(num_simpoints):
    simpoint_stats_file = f"/workspaces/2024/materials/02-Using-gem5/09-sampling/01-simpoint/complete/simpoint{i}-run/stats.txt"
    with open(simpoint_stats_file, "r") as f:
        simpoint_ipc = 0.0
        for line in f:
            if "board.processor.cores.core.ipc" in line:
                line = line.split()
                simpoint_ipc = float(line[1])
        simpoint_ipcs.append(simpoint_ipc)
    simpoint_stdout_file = f"/workspaces/2024/materials/02-Using-gem5/09-sampling/01-simpoint/complete/simpoint{i}-run/simout.txt"
    simpoint_weight = 0.0
    with open(simpoint_stdout_file, "r") as f:
        for line in f:
            if "Ran SimPoint" in line:
                line = line.split()
                simpoint_weight = float(line[-1])
    simpoint_weights.append(simpoint_weight)

predicted_ipc = 0.0

for i in range(num_simpoints):
    predicted_ipc += simpoint_ipcs[i] * simpoint_weights[i]

print(f"predicted IPC: {predicted_ipc}")
print(f"actual IPC: {baseline_ipc}")
print(f"relative error: {(abs(baseline_ipc - predicted_ipc)/baseline_ipc)*100}%")