CPF is a compiler infrastructure that automatically parallelizes sequential C/C++ programs to run efficiently on shared-memory multicore systems.
This work is described in the ASPLOS '20 paper by Apostolakis et al. titled "Perspective: A Sensible Approach to Speculative Automatic Parallelization" (ACM DL, PDF).
To reproduce the evaluation results presented in the ASPLOS 2020 paper, please refer to the artifact of the paper:
This work builds upon Privateer (PLDI '12 by Johnson et al., ACM DL).
If you use CPF in a publication, we would appreciate a citation to the ASPLOS '20 paper:
@inproceedings{apostolakis:2020:asplos,
author = {Apostolakis, Sotiris and Xu, Ziyang and Chan, Greg and Campanoni, Simone and August, David I.},
title = {Perspective: A Sensible Approach to Speculative Automatic Parallelization},
year = {2020},
isbn = {9781450371025},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3373376.3378458},
doi = {10.1145/3373376.3378458},
booktitle = {Proceedings of the Twenty-Fifth International Conference on Architectural Support for Programming Languages and Operating Systems},
pages = {351–367},
numpages = {17},
keywords = {speculation, privatization, automatic parallelization, memory analysis},
location = {Lausanne, Switzerland},
series = {ASPLOS ’20}
}
The version number is in the form of [v Major.Minor.Revision ]
- Major: Each major version matches a specific LLVM version (e.g., version 9 matches LLVM 9, version 11 matches LLVM 11)
- Minor: Starts from 0, each minor version represents either one or more API replacements/removals that might impact the users OR a forced update every six months (the minimum minor update frequency)
- Revision: Starts from 0; each revision version may include bug fixes or incremental improvements
- Major: Matches the LLVM releases on a best-effort basis
- Minor: At least once per six months, at most once per month (1/month ~ 2/year)
- Revision: At least once per month, at most twice per week (2/week ~ 1/month)
CPF relies on LLVM, SCAF and NOELLE. Follow bootstrap/README.md
to install all dependences automatically or customize it.
We also provide a Dockerfile using Ubuntu 20.04 for building and testing CPF. Simply run
docker build . -t cpf:1.0
to build the image and docker run -it cpf:1.0
to start
a container. By default, the build command will compile LLVM, CPF, and NOELLE, with SCAF
being built as a dependency by NOELLE. Again, refer to bootstrap/README.md
to change
this as needed.
If you have any trouble using this framework feel free to create an issue! We will try our best to help.
We welcome contributions from the community to improve this research-grade framework and evolve it to cater for more users.
CPF is licensed under the MIT License.