1library(dplyr)
2library(reshape2)
3library(ggplot2)
4
5res = readLines("benchmark_res.txt")
6header = c("Size", "Dataset", "F77time", "F77err", "F77nops", "Cpptime", "Cpperr", "Cppnops")
7
8## Benchmark result for symmetric solver
9sym_start = grep("eigs_sym", res) + 4
10sym_end   = grep("========", res)[2] - 1
11sym_dat   = strsplit(res[sym_start:sym_end], " ")
12sym_dat   = lapply(sym_dat, function(x) as.numeric(x[x != ""]))
13sym_dat   = as.data.frame(do.call(rbind, sym_dat))
14colnames(sym_dat) = header
15
16sym_medtime = sym_dat %>%
17    select(Size, Dataset, F77time, Cpptime) %>%
18    melt(id.vars = c("Size", "Dataset"),
19         variable.name = "Package", value.name = "Time") %>%
20    group_by(Size, Dataset, Package) %>%
21    summarize(Medtime = median(Time)) %>%
22    mutate(Package = ifelse(grepl("F77", Package), "ARPACK", "Spectra"))
23
24sym_medtime$Size = paste("Matrix size:", sym_medtime$Size)
25
26ggplot(sym_medtime, aes(x = factor(Dataset), y = Medtime)) +
27    geom_bar(aes(fill = Package), width = 0.75, position = "dodge", stat = "identity") +
28    facet_wrap(~ Size, scales = "free", ncol = 2) +
29    xlab("Matrix ID") + ylab("Median Elapsed Time (ms)") +
30    ggtitle("Symmetric Eigen Solver") +
31    theme_bw(base_size = 20) +
32    theme(plot.title = element_text(hjust = 0.5))
33
34## Benchmark result for general solver
35gen_start = grep("eigs_gen", res) + 4
36gen_end   = grep("========", res)[4] - 1
37gen_dat   = strsplit(res[gen_start:gen_end], " ")
38gen_dat   = lapply(gen_dat, function(x) as.numeric(x[x != ""]))
39gen_dat   = as.data.frame(do.call(rbind, gen_dat))
40colnames(gen_dat) = header
41
42gen_medtime = gen_dat %>%
43    select(Size, Dataset, F77time, Cpptime) %>%
44    melt(id.vars = c("Size", "Dataset"),
45         variable.name = "Package", value.name = "Time") %>%
46    group_by(Size, Dataset, Package) %>%
47    summarize(Medtime = median(Time)) %>%
48    mutate(Package = ifelse(grepl("F77", Package), "ARPACK", "Spectra"))
49
50gen_medtime$Size = paste("Matrix size:", gen_medtime$Size)
51
52ggplot(gen_medtime, aes(x = factor(Dataset), y = Medtime)) +
53    geom_bar(aes(fill = Package), width = 0.75, position = "dodge", stat = "identity") +
54    facet_wrap(~ Size, scales = "free", ncol = 2) +
55    xlab("Matrix ID") + ylab("Median Elapsed Time (ms)") +
56    ggtitle("General Eigen Solver") +
57    theme_bw(base_size = 20) +
58    theme(plot.title = element_text(hjust = 0.5))
59