1 Versions

For this empirical study we used the following tools with their given versions. The project PolyJIT contains a meta project that downloads and builds all necessary libraries in the given configuration automatically.

1.1 Tools

Tool URL Version
PolyJIT https://github.com/PolyJIT/PolyJIT.git 9c69b69
LLVM https://llvm.org/git/llvm.git e8afbbe
clang https://llvm.org/git/clang.git 11fbce0
Polly https://llvm.org/git/polly.git 7f80afe
Benchbuild https://github.com/PolyJIT/benchbuild.git 7cf4556

The PolyJIT project serves as a meta project that generates a source distribution with all necessary. Using this project you can specifiy all dependent versions at configure time. You need a standard unix build environment with a few additional libraries. Ubuntu 16.04 is known to work with the meta project, given that necessary libraries like libpqxx and likwid are available on the system. The cmake configuration will guide you through all missing dependencies.

1.2 Raw Data

All experiment results and plots are derived from the following raw data.

Data File
Whole program (per config) complete
Whole program (per config #2) runtime
Regions (With Speedups) region compare
Regions (Timings) regions

1.3 Benchbuild

In the following section you can find the projects involved in this empirical study. All projects are listed with their version and source url. Benchbuild will download these automatically in the given version and cache the projects in a temporary folder for future reuse.

Many projects found in the later sections do not have a corresponding name in the project list. This is caused by dynamic projects that are handled by BenchBuild, for example lnt based projects are listed as their top category SingleSourceBenchmark but not each project from the category is listed individually. However, individual projects are visible in the later stages of this document. In some cases we cannot provide a fixed version number, as it is missing from the project description.

Name Group Domain Version Source
gentoo-bzip2 gentoo app-arch 1.0.6
gentoo-gzip gentoo app-arch None
gentoo-p7zip gentoo app-arch None
gentoo-xz gentoo app-arch None
gentoo-postgresql gentoo dev-db/postgresql None
gentoo-lammps gentoo sci-physics None
gentoo-x264 gentoo media-libs None
gentoo-crafty gentoo games-board None
gentoo-info gentoo debug None
eix gentoo app-portage None
SingleSourceBenchmarks lnt LNT (SSB) 9.0.1.13 http://llvm.org/git/lnt
MultiSourceBenchmarks lnt LNT (MSB) 9.0.1.13 http://llvm.org/git/lnt
MultiSourceApplications lnt LNT (MSA) 9.0.1.13 http://llvm.org/git/lnt
SPEC2006 lnt LNT (Ext) 9.0.1.13 http://llvm.org/git/lnt
Povray lnt LNT (Ext) 9.0.1.13 http://llvm.org/git/lnt
correlation polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
covariance polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
2mm polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
3mm polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
atax polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
bicg polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
doitgen polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
mvt polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
gemm polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
gemver polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
gesummv polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
symm polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
syr2k polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
syrk polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
trmm polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
cholesky polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
durbin polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
gramschmidt polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
lu polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
ludcmp polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
trisolv polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
deriche polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
floyd-warshall polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
nussinov polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
adi polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
fdtd-2d polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
jacobi-1d polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
jacobi-2d polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
seidel-2d polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
heat-3d polybench polybench 4.2 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
correlation polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
covariance polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
2mm polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
3mm polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
atax polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
bicg polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
doitgen polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
mvt polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
gemm polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
gemver polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
gesummv polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
symm polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
syr2k polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
syrk polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
trmm polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
cholesky polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
durbin polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
gramschmidt polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
lu polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
ludcmp polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
trisolv polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
deriche polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
floyd-warshall polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
nussinov polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
adi polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
fdtd-2d polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
jacobi-1d polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
jacobi-2d polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
seidel-2d polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
heat-3d polybench-mod polybench 4.2-1 http://downloads.sourceforge.net/project/polybench/polybench-c-4.2.tar.gz
alignment bots bots 1.1.2 https://github.com/bsc-pm/bots
fft bots bots 1.1.2 https://github.com/bsc-pm/bots
fib bots bots 1.1.2 https://github.com/bsc-pm/bots
floorplan bots bots 1.1.2 https://github.com/bsc-pm/bots
health bots bots 1.1.2 https://github.com/bsc-pm/bots
knapsack bots bots 1.1.2 https://github.com/bsc-pm/bots
nqueens bots bots 1.1.2 https://github.com/bsc-pm/bots
sort bots bots 1.1.2 https://github.com/bsc-pm/bots
sparselu bots bots 1.1.2 https://github.com/bsc-pm/bots
strassen bots bots 1.1.2 https://github.com/bsc-pm/bots
bzip2 benchbuild compression 1.0.6 http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
ccrypt benchbuild encryption 1.10 http://ccrypt.sourceforge.net/download/ccrypt-1.10.tar.gz
crafty benchbuild scientific 25.2 http://www.craftychess.com/downloads/source/crafty-25.2.zip
crocopat benchbuild verification 2.1.4 http://crocopat.googlecode.com/files/crocopat-2.1.4.zip
ffmpeg benchbuild multimedia 3.1.3 http://ffmpeg.org/releases/ffmpeg-3.1.3.tar.bz2
gzip benchbuild compression 1.6 http://ftpmirror.gnu.org/gzip/gzip-1.6.tar.xz
js benchbuild compilation https://github.com/mozilla/gecko-dev.git
lammps benchbuild scientific None https://github.com/lammps/lammps
openblas benchbuild scientific None https://github.com/xianyi/OpenBLAS
lapack benchbuild scientific 3.2.1 http://www.netlib.org/clapack/clapack.tgz
leveldb benchbuild database None https://github.com/google/leveldb
linpack benchbuild scientific None http://www.netlib.org/benchmark/linpackc.new
lulesh benchbuild scientific None https://codesign.llnl.gov/lulesh/LULESH.cc
lulesh-omp benchbuild scientific None https://codesign.llnl.gov/lulesh/LULESH_OMP.cc
mcrypt benchbuild encryption 2.6.8 http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8mcrypt-2.6.8.tar.gz
minisat benchbuild verification None https://github.com/niklasso/minisat
libressl benchbuild encryption 2.1.6 http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.1.6.tar.gz
povray benchbuild multimedia None https://github.com/POV-Ray/povray
python benchbuild compilation 3.4.3 https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tar.xz
Rasdaman benchbuild database None git://rasdaman.org/rasdaman.git
ruby benchbuild compilation 2.2.2 http://cache.ruby-lang.org/pub/ruby/2.2.2/ruby-2.2.2.tar.gz
sdcc benchbuild compilation None svn://svn.code.sf.net/p/sdcc/code/trunk/sdcc
7z benchbuild compression 16.02 http://downloads.sourceforge.net/project/p7zip/p7zip/16.02/p7zip_16.02_src_all.tar.bz2
sqlite3 benchbuild database None http://www.sqlite.org/2015/sqlite-amalgamation-3080900.zip
tcc benchbuild compilation 0.9.26 http://download-mirror.savannah.gnu.org/releases/tinycc/tcc-0.9.26.tar.bz2
x264 benchbuild multimedia None git://git.videolan.org/x264.git
xz benchbuild compression 5.2.1 http://tukaani.org/xz/xz-5.2.1.tar.gz
scimark apollo scientific 2.1c http://math.nist.gov/scimark2/scimark2_1c.zip
backprop rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
bfs rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
b+tree rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
cfd rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
heartwall rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
hotspot rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
hotspot3D rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
kmeans rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
lavaMD rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
leukocyte rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
lud rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
nn rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
nw rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
particlefilter rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
pathfinder rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
srad-1 rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
srad-2 rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
streamcluster rodinia rodinia 3.1 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2

2 Input data used for this analysis.

We use the following three datasets for this analysis. The .csv files can be generated from benchbuild with a successfull run of the ijpp experiment.

$> benchbuild run -E ijpp

This runs a fresh benchbuild experiment with a new experiment ID exp_id. The input data can be regenerated using the following command.

$> benchbuild report -E ijpp -e <exp_id>

If your experiment did not filter any projects, this will take a while. For example, for our analysis here we use exp_id=4ae29f2f-32d3-4e7c-977e-972c39d01b58.

ijpp_all <- read_csv("data/ijpp_report_runtime_4ae29f2f-32d3-4e7c-977e-972c39d01b58.csv")
ijpp_report_complete <- read_csv("data/ijpp_report_complete_4ae29f2f-32d3-4e7c-977e-972c39d01b58.csv")
irc <- read_csv("data/ijpp_report_region_compare_4ae29f2f-32d3-4e7c-977e-972c39d01b58.csv")
ijpp_regions <- read_csv("data/ijpp_report_regions_4ae29f2f-32d3-4e7c-977e-972c39d01b58.csv")

3 Complete overview

The following table provides a complete overview over all programs that managed to fully complete the experiment ijpp.

t_per_config <- gen_t_per_config(ijpp_all)

ijpp_report_runtime <- ijpp_all[ijpp_all$group != "polybench-mod",]
ijpp_report_runtime <- ijpp_report_runtime[ijpp_report_runtime$project %in% t_per_config$Project,]
ijpp_with_baselines <- add_baseline_comparison(ijpp_report_runtime)

DT::datatable(t_per_config)

4 Regionwise Results

Histogram of all regionwise measurements, excluding the band between speedup values of –1.1 and 1.1. We used a binwidth of 0.5.

plot_region_histogram(irc_gb, store=FALSE, w=7, h=6, "figures/region_histogram")

Pointcloud and violin plots of the regionwise results.

plot_region_wise_points(ijpp_regions_f, store=FALSE, w=7, h=6, filename="figures/region-per-config-speedups")

plot_region_wise_violin(ijpp_regions_f, store=FALSE, w=7, h=6, filename="figures/region-per-config-vio-speedup-polly")

5 Programwise results

5.1 Overall

plot_pointcloud2D(ijpp_with_baselines, filename="figures/per-config-speedups")

5.2 Single baseline: Static (-O3)

5.2.1 Pointcloud 2D (O3, Good)

plot_pointcloud2D(ijpp_good_o3, filename="figures/per-config-speedups-better-than-o3")

5.2.2 VioPlot (O3)

plot_vioplot(ijpp_with_baselines, use_polly=FALSE, filename="figures/per-config-vio-speedup-o3")
## Warning: Removed 56 rows containing non-finite values (stat_ydensity).

5.2.3 BarPlot (O3)

plot_bar_speedup(ijpp_with_baselines, use_polly=FALSE, filename="figures/per-config-bar-all-o3")

5.2.4 BoxPlot (BL O3, Good)

plot_speedup_boxplot(ijpp_good_o3, filename="figures/per-config-bp-speedup-o3")

5.3 VioBar (O3)

Violin plot with baseline configuration Static (-O3). The dataset contains values that include at least one configuration with a speedup greater than 1.1.

plot_viobar(ijpp_good_o3, use_polly=FALSE, filename="figures/vio-good-bp-per-config_o3")

5.4 Barplot (O3, Good)

Bar plot with baseline configuration Static (-O3). The dataset contains values that include at least one configuration with a speedup greater than 1.1.

plot_bar_speedup(ijpp_good_o3, use_polly=FALSE, filename="figures/per-config-bar-speedup-o3")

5.5 Boxplot (O3, Bad)

Box plot with baseline configuration Static (-O3). The dataset contains values that include at least one configuration with a slowdown greater (speedup less than) than -1.1.

plot_speedup_boxplot(ijpp_bad_o3, filename="figures/per-config-bp-slowdown-o3")

5.6 VioBar (O3, Bad)

Violin plot with baseline configuration Static (-O3). The dataset contains values that include at least one configuration with a slowdown greater (speedup less than) than -1.1.

plot_viobar(ijpp_bad_o3, use_polly=FALSE, filename="figures/vio-bad-bp-per-config_o3")
## Warning: Removed 56 rows containing non-finite values (stat_ydensity).
## Warning: Removed 56 rows containing non-finite values (stat_boxplot).

5.7 Single Baseline: Static (-O3 -polly -parallel)

The following plots consider a baseline configuration of Static (-O3 -polly -parallel).

5.7.1 Pointcloud 2D (Polly, Good)

plot_pointcloud2D(ijpp_good_polly, filename="figures/per-config-speedups-better-than-polly")

5.7.2 VioPlot (Polly)

plot_vioplot(ijpp_with_baselines, filename="figures/per-config-vio-speedup-polly")
## Warning: Removed 50 rows containing non-finite values (stat_ydensity).

5.7.3 VioBar (Polly)

Violin plot with baseline configuration Static (-O3 -polly -parallel). The dataset contains values that include at least one configuration with a speedup greater than 1.1.

plot_viobar(ijpp_good_polly, use_polly=TRUE, filename="figures/vio-good-bp-per-config_polly")

5.8 Barplot (Polly, Good)

Bar plot with baseline configuration Static (-O3 -polly -parallel). The dataset contains values that include at least one configuration with a speedup greater than 1.1.

plot_bar_speedup(ijpp_good_polly, use_polly=TRUE, filename="figures/per-config-bar-speedup-polly")

5.9 VioBar (Polly, Bad)

Violin plot with baseline configuration Static (-O3 -polly -parallel). The dataset contains values that include at least one configuration with a slowdown greater (speedup less than) than -1.1.

plot_viobar(ijpp_bad_polly, use_polly=TRUE, filename="figures/vio-bad-bp-per-config_polly")
## Warning: Removed 50 rows containing non-finite values (stat_ydensity).
## Warning: Removed 50 rows containing non-finite values (stat_boxplot).