Shoal runtime library (Usenix ATC'15)
Shoal is a library that provides an array memory abstraction that
automatically employs replication, partitioning and distribution
according to memory access patterns given in
Shoal also uses hardware extensions such as DMA engines (Barrelfish) and large/hugepage support if present on the machine.
Currently, we provide two types of workloads:
- Streamcluster from the PARSEC benchmark suite, which we manually modified to use Shoal (see below)
- pagerank, triangle-count, hop-dist from the Green Marl graph language; here, we provide extensions to the Green Marl compiler to automatically extract memory access patterns from high-level languages and generate a low-level C representation of the Green Marl input program that uses Shoal's memory abstraction (available on github)
This is work presented at Usenix ATC'15.
The rest of this document describes how to install dependencies and how to acquire Shoal.
Dependencies and download of Shoal
Currently, we support Ubuntu and the Barrelfish OS to run Shoal.
Ubuntu / Linux
- On Ubuntu, install the following dependencies to compile Shoal:
apt-get install libpapi-dev liblua5.2-dev libpfm4-dev libnuma-dev
- Create a new directory for development with Shoal (
mkdir shoal-base) and cd into it
- Acquire Shoal:
git clone firstname.lastname@example.org:libshoal/shoal.git libshoal. You should now have Shoal in
- Clone the Barrelfish source.
git clone git://git.barrelfish.org/git/barrelfish
- cd into
barrelfish/liband acquire Shoal
git clone email@example.com:libshoal/shoal.git shoal
- run Hake again.
tests/shl_simpleto your symbolic_targets
Streamcluster for Shoal
We provide a patch with our modifications to PARSEC's Streamcluster
benchmark as a patch in
- Download PARSEC 3.0:
- Extract it:
tar -xf parsec-3.0-core.tar.gz.
- Copy the source:
cp -r parsec-3.0/pkgs/kernels/streamcluster/src streamcluster. You should now see Streamcluster next to Shoal as
shoal-base/streamcluster. Change into the Streamcluster directory.
- Apply the patch-file provided with the Shoal distribution:
patch -p1 < ../libshoal/apps/streamcluster.patch
- Compile Streamcluster:
- Setup environemnt:
export SHL_PARTITION=0; export SHL_HUGEPAGE=0; export SHL_CPU_AFFINITY=0-$(nproc)
- Execute Streamcluster:
Shoal has build-in support for PAPI. However, it is disabled as
default to reduce the number of dependencies. To enable it,
and execute a clean build.