This is the main source code repository for Split Annotations. It contains the source code for the C implementation, the Python implementation, and the benchmarks from the SOSP 2019 paper.
Split annotations (SAs) are a system for enabling optimizations such as pipelining and parallelization underneath existing libraries. Other approaches for enabling these optimizations, such as intermediate representations, compilers, or DSLs, are heavyweight solutions that require re-architecting existing code. Unlike these approaches, SAs enable these optimizations without requiring changes to existing library functions.
Installing from Source
- Make sure you have the required dependencies:
- Python 3.5
- The latest version of Rust. See the instructions in the link.
pkgconfig. You can download it as follows:
sudo apt-get install pkg-config
build-essentialpackage on Linux distributions. You can download it as follows:
sudo apt-get update sudo apt-get install build-essential
To build the C implementation:
- Clone this repository and set the
$SA_HOMEenvironment variable (the latter is not necessary but simplifies the remaining steps):
cd $HOME git clone https://github.com/weld-project/split-annotations.git cd split-annotations export SA_HOME=`pwd`
- Build the C implementation:
cd $SA_HOME/c cargo build --release
- Optionally build the provided annotated C libraries (Intel MKL and ImageMagick). See
EXPERIMENTS.mdfor directions on how to build MKL and ImageMagick, and then:
cd $SA_HOME/c/lib/composer_mkl make cd $SA_HOME/c/lib/ImageMagick make
The Python implementation does not require any special installation, but running the benchmarks requires certain dependencies. See the instructions in
If you need help installing or using split annotations, or have general questions about the project, feel free to either create a GitHub issue or email shoumik @ stanford . edu (with the spaces removed).