From 86e6037e599c2df2a08b3456d7fe3bca337ed5b9 Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Sun, 26 Jul 2026 23:35:04 +0200 Subject: [PATCH] Group fault rates / instruction plot per experiment --- injections/fault_rates_per_instruction.svg | 4 +- .../combined_fault_rates_per_instruction.r | 39 +++++++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/injections/fault_rates_per_instruction.svg b/injections/fault_rates_per_instruction.svg index aa51617..842ca20 100644 --- a/injections/fault_rates_per_instruction.svg +++ b/injections/fault_rates_per_instruction.svg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47819df1d31fba4225b71cd23f1e2f7f1cc781868f572f2e679c3900c4e0d0fb -size 13619 +oid sha256:aa323120393b929cd1defc143d2e4f5b4fe0d2731377385c6747ab78ef428cc9 +size 9711 diff --git a/scripts/charts/combined_fault_rates_per_instruction.r b/scripts/charts/combined_fault_rates_per_instruction.r index 0a57b7a..ad65438 100644 --- a/scripts/charts/combined_fault_rates_per_instruction.r +++ b/scripts/charts/combined_fault_rates_per_instruction.r @@ -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") )