Group fault rates / instruction plot per experiment

This commit is contained in:
2026-07-26 23:35:04 +02:00
parent aad3b85d8f
commit 86e6037e59
2 changed files with 33 additions and 10 deletions
Binary file not shown.
@@ -1,6 +1,7 @@
library(ggplot2)
library(dplyr)
library(readr)
library(stringr)
# Usage: Rscript combined_fault_rates.r exp_abspath1 exp_abspath2 ... [faults_file]
@@ -51,10 +52,23 @@ for (arg in exp_args) {
next
}
match <- str_match(
basename(arg),
"^\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}_(.+?)_(c|aot|interp)_"
)
if (is.na(match[1, 1])) {
base_name <- basename(arg)
variant <- "unknown"
} else {
base_name <- match[1, 2]
variant <- match[1, 3]
}
rates <- bind_rows(
rates,
data.frame(
experiment = basename(arg),
base_name = base_name,
variant = variant,
fault_rate = total_faults / total_instrs
)
)
@@ -64,25 +78,34 @@ if (nrow(rates) == 0) {
stop("No data loaded")
}
# Order by fault rate
# Order base_names by their max fault rate
base_order <- rates |>
group_by(base_name) |>
summarise(max_rate = max(fault_rate), .groups = "drop") |>
arrange(desc(max_rate)) |>
pull(base_name)
rates <- rates |>
arrange(desc(fault_rate)) |>
mutate(experiment = factor(experiment, levels = experiment))
mutate(
base_name = factor(base_name, levels = base_order),
variant = factor(variant, levels = c("c", "aot", "interp", "unknown"))
)
plot <- ggplot(
rates,
aes(x = experiment, y = fault_rate, fill = experiment)
aes(x = base_name, y = fault_rate, fill = variant)
) +
geom_col() +
geom_col(position = position_dodge(preserve = "single")) +
scale_y_log10() +
labs(
title = "Fault Rate per Instruction",
x = "Experiment",
y = "Faults / Instruction Count"
y = "Faults / Instruction Count",
fill = "Variant"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 90, hjust = 1),
legend.position = "none",
plot.title = element_text(size = 14, face = "bold")
)