• Stars
    star
    126
  • Rank 284,543 (Top 6 %)
  • Language
    Python
  • License
    Creative Commons ...
  • Created almost 3 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

SuperSonic, a new open-source framework to allow compiler developers to integrate RL into compilers easily, regardless of their RL expertise.

Maintenance License CC-BY-4.0 Documentation Status

Automating reinforcement learning architecture design for code optimization.

Check the website for more information.

Compiler phase ordering optimisation

This script eanbles the use of RL to tune the LLVM compiler phase order for code resize reduction or runtime optimisation.

To set the optimisation target, choose one of the target of the reward_function to select the approach to evaluate your code.

RewardFunctions=[
                # "codesize", "ic" # For code size reduction
                "runtime" # For run time
            ],

Installation

The system was tested on the following operating systems:

  • Ubuntu 18.04

Supersonic builds upon CompilerGym v0.2.3.

First, install CompilerGym required toolchain using:

sudo apt install -y clang-9 clang++-9 clang-format golang libjpeg-dev \
  libtinfo5 m4 make patch zlib1g-dev tar bzip2 wget libgl1-mesa-glx
mkdir -pv ~/.local/bin
wget https://github.com/bazelbuild/bazelisk/releases/download/v1.7.5/bazelisk-linux-amd64 -O ~/.local/bin/bazel
wget https://github.com/hadolint/hadolint/releases/download/v1.19.0/hadolint-Linux-x86_64 -O ~/.local/bin/hadolint
chmod +x ~/.local/bin/bazel ~/.local/bin/hadolint
go get github.com/bazelbuild/buildtools/buildifier
GO111MODULE=on go get github.com/uber/prototool/cmd/prototool@dev
export PATH="$HOME/.local/bin:$PATH"
export CC=clang
export CXX=clang++

Then, we recommend using conda to manage the remaining build dependencies. First create a conda environment with the required dependencies:

(base) $ conda create -y -n supersonic python=3.8
(base) $ conda activate supersonic
(supersonic) $ conda install -y -c conda-forge cmake doxygen pandoc patchelf
(supersonic) $ cd SUPERSONIC
(supersonic) $ pip install -r requirements.txt

Client RL search and testing usage

This demo shows how to apply the saved client RL to optimize a test program for Code Size Reduction.

(supersonic) $ export PYTHONPATH=$PYTHONPATH:`pwd`
(supersonic) $ export PYTHONPATH=$PYTHONPATH:`pwd`/third_party
#Client RL search
(supersonic) $ python SuperSonic/policy_search/supersonic_main.py --mode policy --total_steps 10 2>/dev/null
#Client RL Parameter Tuning
(supersonic) $ python SuperSonic/policy_search/supersonic_main.py --mode config --iterations 10 2>/dev/null
#Client RL Deployment
(supersonic) $ python SuperSonic/policy_search/supersonic_main.py --datapath "benchmark://cbench-v1/lame" --mode deploy --training_iterations 50 2>/dev/null

Note: Setup a symlink if you encounter the following issue: FileNotFoundError: [Errno 2] No such file or directory: 'clang++'.

ln -s /usr/bin/clang-9 /usr/bin/clang
ln -s /usr/bin/clang++-9 /usr/bin/clang++

Contributing

We welcome contributions to SuperSonic. If you are interested in contributing please see this document.

Citation

If you use Supersonic in any of your work, please cite our paper:

@inproceedings{10.1145/3497776.3517769,
author = {Huanting Wang, Zhanyong Tang, Cheng Zhang, Jiaqi Zhao, Chris Cummins, Hugh Leather, and Zheng Wang},
title = {Automating Reinforcement Learning Architecture Design for Code Optimization},
year = {2022},
isbn = {9781450391832},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3497776.3517769},
doi = {10.1145/3497776.3517769},
booktitle = {Proceedings of the 31st ACM SIGPLAN International Conference on Compiler Construction},
pages = {129–143},
numpages = {15},
keywords = {Compiler optimization, reinforcement learning, code optimization},
location = {Seoul, South Korea},
series = {CC 2022}
}