Welcome to the artifact evaluation bundle for "Taming the Parallel Effect Zoo!"
Submitted version of paper (superseded by camera-ready version)
Using Docker
Install Docker. If your Docker installation requires root
, then
prefix the following commands with sudo
.
docker build -t pldi2014-artifact github.com/iu-parfunc/pldi2014-artifact
docker run -i -t pldi2014-artifact /bin/bash
- Look around at the results as described below
If you use this approach, note that the benchmark results were generated on our machines, not by you! If you want to do it yourself, see the run-the-benchmarks-yourself way, described below.
docker pull iuparfunc/pldi2014-artifact:bench
docker run -i -t iuparfunc/pldi2014-artifact:bench /bin/bash
- Look around at the results as described below
docker pull iuparfunc/pldi2014-artifact:build
docker run -e USER=pldi -i -t iuparfunc/pldi2014-artifact:build /bin/bash
cd pldi2014-artifact
- Build everything (will take some time): run
make everything
- Look around at the results as described below
Note that GHC 7.6.3 and Cabal 1.18 are required.
- Install the Haskell Platform, version 2013.2.0.0, including GHC 7.6.3
- Install Cabal 1.18 or newer
- Clone the artifact repo: run
git clone https://github.com/iu-parfunc/pldi2014-artifact.git
cd pldi2014-artifact
- Build everything (will take some time -- allow several hours): run
make everything
- Look around at the results as described below
I got a cabal: unrecognised command: sandbox
error!
What does cabal --version
say? If you have a version older than 1.18, you'll need to upgrade to 1.18 or newer to support the sandbox
feature.
I got a cabal: Could not resolve dependencies
error!
What does ghc --version
say? Make sure to use GHC 7.6.3.
Eric Holk, Vincent St-Amour
There are three components to this bundle:
- Benchmark results
- LVish documentation
- LVish code examples
LVars are monotonically growing, lattice-based data structures for deterministic parallel programming. LVish is a Haskell library for programming with LVars.
First, follow the instructions for downloading and building the artifact bundle. Doing so will install LVish and its dependencies, build the LVish documentation and examples, and run the benchmarks.
Benchmark results for PhyBin, the LVish bioinformatics application
described in section 7.1 of the paper, should appear in
phybin_results.txt
.
If you ran make everything
, phybin_results.txt
should already
exist. Alternatively, to build and run only the PhyBin benchmarks,
run make phybin_bench
.
Benchmark results for evaluating monad tranformer overhead, described
in section 7.2 of the paper, should appear in
transformer_results.txt
.
If you ran make everything
, transformer_results.txt
should already
exist. Alternatively, to build and run only the transformer
benchmarks, run make transformer_bench
.
Benchmark results for parallel merge sort in LVish, described in section 7.3 of the paper, should appear in
hs_mergesort_results.txt
c_mergesort_results.txt
Each of those files will contain three numbers, one per line, which
are running times (in seconds) on 1, 2, and 4 cores, respectively.
c_mergesort_results.txt
is the version that bottoms out with a
library call to a sequential C sort (the version marked as "ParST/C"
in Figure 5 of the paper); hs_mergesort_results.txt
is a pure
Haskell version ("ParST/HSonly" in the table in Figure 5 of the
paper).
If you ran make everything
, hs_mergesort_results.txt
and
c_mergesort_results.txt
should already exist. Alternatively, to
build and run only the merge sort benchmarks, run make mergesort_bench
.
The Haddock-generated HTML documentation will appear inside the
.cabal-sandbox/share/doc/
directory.
The main package provides the entrypoint Control.LVish, as well as various LVar datatypes.
Par-transformers layers on additonal effects not found in the main module.
The directory LVish-examples/2.0/
contains a variety of toy examples
of LVish programs. See LVish-examples/2.0/README.md
for more
details.