This repo contains all code necessary for reproducing the experiments in the following paper:
Parallel Block-Delayed Sequences. Sam Westrick, Mike Rainey, Daniel Anderson, and Guy E. Blelloch. PPoPP 2022
It includes code for both MPL and C++, including both the delayed-sequences library and all benchmarks.
An artifact was published with the paper, and is available on Zenodo. The version of this repo used to generate the artifact is preserved on the ppopp22-artifact branch. If you are interested in reproducing experimental results from the paper, we recommending using the artifact directly.
The main branch includes improvements made to the libraries and benchmarks after the artifact was published. These changes include:
- For MPL, a cleaned-up library implementation which is easier to understand
and maintain. The new library code is available at
ml/lib/NewDelayedSeq.sml
. When compiling a benchmark, usenew-delay
for the cleaned-up library. (For example,cd ml && make bfs.new-delay.mpl-latest.bin
.) - Small performance improvements to a few benchmarks.
First, install mpl-switch
.
Next, run the following to install versions of mpl
needed for experiments.
This will take a long time.
$ ./init
The files ml-exp.json
and cpp-exp.json
define benchmark parameters.
Do the following to run both:
$ ./run
This creates a directory results/
named with the current time. Each line
of a results file is a JSON object with various info about the run.
To see a summary of results, do:
$ ./report
-
In
cpp/
andml/
, there needs to be aMakefile
that has targets of the formBENCH.IMPL.CONFIG.bin
, for examplemcss.array.mpl.bin
andprimes.delay.cpp.bin
. -
The
ml-exp.json
andcpp-exp.json
files are passed to thescripts/gencmds
utility. Ask Sam about documentation. Basically,gencmds
produces a bunch of "rows" where each row has key/value pairs that define one shell command. These rows are then passed toscripts/runcmds
, which runs each command and writes out the results. Important key/value pairs in the rows include:cmd
: the shell command to run the experimentcwd
: the subdirectory in which to run this commandtag
: a unique name for this experimentprocs
: how many processors to run onbench
: the name of the benchmarkconfig
: the configuration used to compile the benchmark