summaryrefslogtreecommitdiff
path: root/scripts/graphs/common.r
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/graphs/common.r')
-rw-r--r--scripts/graphs/common.r262
1 files changed, 0 insertions, 262 deletions
diff --git a/scripts/graphs/common.r b/scripts/graphs/common.r
deleted file mode 100644
index 2c437a9f..00000000
--- a/scripts/graphs/common.r
+++ /dev/null
@@ -1,262 +0,0 @@
-
-# ==================================================================================================
-# This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This
-# project uses a tab-size of two spaces and a max-width of 100 characters per line.
-#
-# Author(s):
-# Cedric Nugteren <www.cedricnugteren.nl>
-#
-# This file implements the common performance scripts, such as creating a graph.
-#
-# ==================================================================================================
-
-# Colours
-black = "#000000"
-grey = "#888888"
-purplish = "#550077" # [ 85, 0,119] lumi=26
-blueish = "#4765b1" # [ 71,101,177] lumi=100
-redish = "#d67568" # [214,117,104] lumi=136
-greenish = "#9bd4ca" # [155,212,202] lumi=199
-
-# Sets the graph markers (circles, triangles, etc.)
-pchs = c(15, 18, 17, 12)
-
-# Other constants
-kilo = 1024
-mega = 1024*1024
-
-# R options
-options("width"=170)
-
-# ==================================================================================================
-
-# Settings
-num_runs <- 5
-num_runs_short <- 50
-xtics_subset_threshold <- 100
-xtics_subset_stepsize <- 8
-
-devices <- c("-platform","-device")
-options_string <- "-q -no_abbrv -cblas 0"
-
-# Command-line arguments
-command_line <- commandArgs(trailingOnly=TRUE)
-if (length(command_line) != 2) {
- print("Usage for device Z on platform Y: Rscript xxxxx.r Y Z")
- quit()
-}
-platform_id <- command_line[1]
-device_id <- command_line[2]
-
-# Selects the device
-devices_values <- c(platform_id, device_id)
-devices_string <- paste(devices, devices_values, collapse=" ")
-
-
-# Filter the string: only lines containing a ";" can be valid lines
-filter_string <- function(raw_result_string) {
- result_string <- c()
- for (line in raw_result_string) {
- if (grepl(";",line)) {
- result_string <-
- c(result_string, line)
- }
- }
- return(result_string)
-}
-
-# ==================================================================================================
-
-# The main function
-main <- function(routine_name, precision, test_names, test_values,
- test_xlabels, test_xaxis, metric_gflops) {
-
- # Names
- display_name <- toupper(routine_name)
- if (precision == 16) { display_name <- gsub("^X","H",display_name); }
- if (precision == 32) { display_name <- gsub("^X","S",display_name); }
- if (precision == 64) { display_name <- gsub("^X","D",display_name); }
- if (precision == 3232) { display_name <- gsub("^X","C",display_name); }
- if (precision == 6464) { display_name <- gsub("^X","Z",display_name); }
- executable <- paste("./clblast_client_", routine_name, sep="")
-
- # Display
- library_names <- c("CLBlast", "clBLAS")
- if (precision == 16) { library_names <- c("CLBlast FP16", "CLBlast FP32", "clBLAS FP32"); }
- colourset <- c(blueish, redish)
- if (precision == 16) { colourset <- c(blueish, purplish, redish); }
-
- # Configures the outputfile
- file_name <- paste(display_name, ".pdf", sep="")
- if (length(test_names) == 6) {
- pdf(file_name, height=8, width=13)
- par(mfrow=c(2, 3))
- par(oma=c(0, 0, 0, 0))
- par(mar=c(4.6, 4.4, 1.5, 0)) # bottom, left, top, right [c(5.1, 4.1, 4.1, 2.1)]
- par(mgp=c(2.8, 0.6, 0)) # location of xlab/ylab, tick-mark labels, tick marks [c(3, 1, 0)]
- }
- else { # length(test_names) == 2
- pdf(file_name, height=8, width=13)
- par(mfrow=c(2, 1))
- par(oma=c(0, 0, 0, 0))
- par(mar=c(4.6, 4.4, 1.5, 0)) # bottom, left, top, right [c(5.1, 4.1, 4.1, 2.1)]
- par(mgp=c(2.8, 0.6, 0)) # location of xlab/ylab, tick-mark labels, tick marks [c(3, 1, 0)]
- }
-
- # Loops over the test-cases
- for (test_id in 1:length(test_names)) {
- params_values <- test_values[[test_id]]
-
- # Loops over the commands within a single list (within a case)
- for (command_id in 1:length(params_values)) {
-
- # Runs the client and captures the result
- params_string <- paste(parameters, params_values[[command_id]], collapse=" ")
- arguments <- paste(devices_string, params_string, options_string, sep=" ")
- print(paste("Running", executable, arguments, sep=" "))
- raw_result_string <- system2(command=executable, args=arguments, stdout=TRUE)
- result_string <- filter_string(raw_result_string)
-
- # Reads the result into a dataframe
- command_db <- read.csv(text=result_string, sep=";")
-
- # For half-precision: also runs the FP32 version for comparison
- if (precision == 16) {
- params_string <- gsub("-precision 16", "-precision 32", params_string)
- arguments <- paste(devices_string, params_string, options_string, sep=" ")
- print(paste("Running", executable, arguments, sep=" "))
- raw_result_string <- system2(command=executable, args=arguments, stdout=TRUE)
- result_string <- filter_string(raw_result_string)
-
- # Reads the result into a dataframe
- command_db_32 <- read.csv(text=result_string, sep=";")
- stopifnot(nrow(command_db) == nrow(command_db_32))
-
- # Combines the results
- command_db["ms_FP32_1"] = command_db_32$ms_1
- command_db["GFLOPS_FP32_1"] = command_db_32$GFLOPS_1
- command_db["GBs_FP32_1"] = command_db_32$GBs_1
- command_db["ms_FP32_2"] = command_db_32$ms_2
- command_db["GFLOPS_FP32_2"] = command_db_32$GFLOPS_2
- command_db["GBs_FP32_2"] = command_db_32$GBs_2
- }
-
- # Append the results to the final dataframe
- if (command_id == 1) {
- db <- command_db
- } else {
- db <- rbind(db, command_db)
- }
- }
- print(db)
-
- # Sets the values on the x-axis and their labels (test dependent)
- if (is.character(test_xaxis[[test_id]][[1]])) {
- xdata <- db[,test_xaxis[[test_id]][[1]]]
- xtics <- xdata
- log_scale <- test_xaxis[[test_id]][[2]]
- }
- else {
- xdata <- test_xaxis[[test_id]][[1]]
- xtics <- test_xaxis[[test_id]][[2]]
- log_scale <- ""
- }
-
- # Plots the graph with GFLOPS on the Y-axis
- if (metric_gflops) {
- if (precision == 16) {
- ydata = list(db$GFLOPS_1, db$GFLOPS_FP32_1, db$GFLOPS_FP32_2)
- ymax = max(max(db$GFLOPS_1), max(db$GFLOPS_FP32_1), max(db$GFLOPS_FP32_2))
- } else {
- ydata = list(db$GFLOPS_1, db$GFLOPS_2)
- ymax = max(max(db$GFLOPS_1), max(db$GFLOPS_2))
- }
- plot_graph(xdata=xdata, ydata=ydata, log_setting=log_scale,
- xmin=min(xdata), xmax=max(xdata),
- ymin=0, ymax=ymax,
- xtics=xtics,
- xlabel=test_xlabels[[test_id]], ylabel="GFLOPS (higher is better)",
- graph_title=paste(display_name, test_names[[test_id]], sep=" "),
- multiple=50, experiment_names=library_names, colourset=colourset)
- # Plots the graph with GB/s on the Y-axis
- } else {
- if (precision == 16) {
- ydata = list(db$GBs_1, db$GBs_FP32_1, db$GBs_FP32_2)
- ymax = max(max(db$GBs_1), max(db$GBs_FP32_1), max(db$GBs_FP32_2))
- } else {
- ydata = list(db$GBs_1, db$GBs_2)
- ymax = max(max(db$GBs_1), max(db$GBs_2))
- }
- plot_graph(xdata=xdata, ydata=ydata, log_setting=log_scale,
- xmin=min(xdata), xmax=max(xdata),
- ymin=0, ymax=ymax,
- xtics=xtics,
- xlabel=test_xlabels[[test_id]], ylabel="GB/s (higher is better)",
- graph_title=paste(display_name, test_names[[test_id]], sep=" "),
- multiple=10, experiment_names=library_names, colourset=colourset)
- }
- }
-}
-
-# ==================================================================================================
-
-# Plots data
-plot_graph <- function(xdata, ydata, log_setting,
- xmin, xmax, ymin, ymax,
- xtics, xlabel, ylabel,
- graph_title,
- multiple, experiment_names, colourset) {
-
- # Update the ymax to the next multiple of something
- ymax <- multiple*ceiling(ymax/multiple)
-
- # Add kilo or mega to the x-labels
- for (i in 1:length(xtics)) {
- if (!is.na(as.numeric(xtics[i]))) {
- if (as.numeric(xtics[i])%%mega == 0) {
- xtics[i] <- paste(as.character(as.numeric(xtics[i])/mega), "M", sep="")
- } else if (as.numeric(xtics[i])%%kilo == 0) {
- xtics[i] <- paste(as.character(as.numeric(xtics[i])/kilo), "K", sep="")
- }
- }
- }
-
- # Creates an initial graph with axis but without data
- par(new=F)
- plot(x=xmin:xmax, y=rep(1, length(xmin:xmax)), log=log_setting,
- main="", xlab="", ylab="",
- ylim=c(ymin, ymax), xlim=c(xmin, xmax), axes=F, "n")
- axis(side=2, las=2)
- if (length(xdata) > xtics_subset_threshold) { # Too many indices to print, plot only every Nth
- subset <- seq(from=1, to=length(xdata), by=xtics_subset_stepsize)
- axis(side=1, at=xdata[subset], labels=xtics[subset], las=2)
- } else {
- axis(side=1, at=xdata, labels=xtics, las=2)
- }
- title(xlab=xlabel, line=-1)
- title(ylab=ylabel, line=2)
- title(graph_title, line=-2)
- par(new=T)
-
- # Loops over all experiments
- num_experiments <- length(ydata)
- for (id in 1:num_experiments) {
-
- # Plots the data for this experiment
- plot(x=xdata, y=ydata[[id]], log=log_setting,
- col=colourset[id], pch=pchs[id], lty=1, lwd=1, cex=1,
- xlab="", ylab="", ylim=c(ymin, ymax), xlim=c(xmin, xmax),
- axes=F, "b", xpd=T)
- par(new=T)
- }
-
- # Add a legend
- legend("bottomright", experiment_names,
- lwd=1, ncol=1, col=colourset, pch=pchs, lty=1, cex=1,
- bty="n", xpd=T)
-
- # Done
- par(new=F)
-}
-
-# ==================================================================================================