|
| 1 | +# Target-Aware Implementation of Real Expressions |
| 2 | + |
| 3 | +This is the artifact for our paper "Target-Aware Implementation of Real Expressions". |
| 4 | +In our paper, we presented Chassis, |
| 5 | + a target-aware numerical compiler, |
| 6 | + that compiles mathematical expressions to |
| 7 | + a particular target, including hardware ISAs, |
| 8 | + programming languages, and software libraries. |
| 9 | +If you wish to evaluate the artifact, |
| 10 | + please start with the "Getting Started" section |
| 11 | + of this file. |
| 12 | +The evaluation takes a couple of hours to run. |
| 13 | + |
| 14 | +## Getting Started |
| 15 | + |
| 16 | +We recommend an x86-64 machine with at least 32 GB of RAM, |
| 17 | + running some Linux distribution. |
| 18 | +The machine we used for our evaluation |
| 19 | + used an AMD EPYC 7702 CPU, with 512 GB of RAM, |
| 20 | + running Ubuntu 20.04 LTS. |
| 21 | +You will need to install a number of tools and libraries. |
| 22 | +We ran our evaluation using `bash`. |
| 23 | + |
| 24 | +### Racket |
| 25 | + |
| 26 | +Install [Racket](https://download.racket-lang.org/) from the official download page. |
| 27 | +We recommend at least Racket 8.12. |
| 28 | +The `snap` versions of Racket are strongly discouraged |
| 29 | + since they are known to be broken. |
| 30 | + |
| 31 | +### Rust |
| 32 | + |
| 33 | +Install Rust using the [rustup](https://rustup.rs/) installer. |
| 34 | +By default, `rustup` installs the newest stable version of Rust. |
| 35 | +We used Rust 1.77.2, so it is guaranteed to be newer. |
| 36 | +Updating Rust occasionally breaks the Rust dependency for Chassis. |
| 37 | +If you experience any problems, you can follow `rustup` documentation |
| 38 | + to install a specific version of Rust. |
| 39 | + |
| 40 | +### Python |
| 41 | + |
| 42 | +Python is installed by default on Linux distributions. |
| 43 | +We recommend at least Python 3.10. |
| 44 | +If you wish to install a specific version of Python, |
| 45 | + we recommend using [pyenv](https://github.com/pyenv/pyenv) |
| 46 | + as an installer. |
| 47 | +We recommend creating a virtual environment |
| 48 | + by running the following series of commands. |
| 49 | +Create the virtual environment under `.env` with |
| 50 | +``` |
| 51 | +bash> python -m venv .env/ |
| 52 | +``` |
| 53 | +Activate the virtual environment using |
| 54 | +``` |
| 55 | +bash> source .env/bin/activate |
| 56 | +``` |
| 57 | +and install `numpy`, `matplotlib`, and `scipy` packages |
| 58 | +``` |
| 59 | +bash> pip install numpy matplotlib scipy |
| 60 | +``` |
| 61 | + |
| 62 | +### Julia |
| 63 | + |
| 64 | +Install Julia using the [juliaup](https://julialang.org/downloads/) installer. |
| 65 | +Like `rustup`, `juliaup` installs the newest stable version of Rust. |
| 66 | +We recommend at least Julia 1.10. |
| 67 | + |
| 68 | +### Clang |
| 69 | + |
| 70 | +We used Clang 14 as our C/C++ compiler. |
| 71 | +We recommend installing Clang through your package manager. |
| 72 | + |
| 73 | +### libvdt |
| 74 | + |
| 75 | +The vdt library is a vectorized math library developed at CERN. |
| 76 | +Building vdt requires CMake which is usually available through your package manager. |
| 77 | +To install, clone the [repo](https://github.com/dpiparo/vdt). |
| 78 | +Then navigate to the `vdt` directory and run |
| 79 | +``` |
| 80 | +bash> cmake . |
| 81 | +bash> make |
| 82 | +bash> make install |
| 83 | +``` |
| 84 | +The final step possibly requires root. |
| 85 | + |
| 86 | +## Testing installed software |
| 87 | + |
| 88 | +To ensure that your environment is properly set up. |
| 89 | +Run the following commands and ensure they do not print any errors. |
| 90 | + |
| 91 | +Check that Racket is installed. |
| 92 | +``` |
| 93 | +bash> racket -v |
| 94 | +``` |
| 95 | +Check that Rust is installed. |
| 96 | +``` |
| 97 | +bash> cargo --version |
| 98 | +``` |
| 99 | +Check that Clang is installed. |
| 100 | +``` |
| 101 | +bash> clang -v |
| 102 | +``` |
| 103 | +Check that Python is installed with the proper libraries. |
| 104 | +``` |
| 105 | +bash> python3 |
| 106 | +>>> import numpy, matplotlib, scipy |
| 107 | +>>> exit() |
| 108 | +``` |
| 109 | +Check that Julia is installed. |
| 110 | +``` |
| 111 | +bash> julia -v |
| 112 | +``` |
| 113 | +Check that `libvdt` is installed. |
| 114 | +On Linux, run the following command. |
| 115 | +It should print a single entry with the path of `libvdt.so`. |
| 116 | +``` |
| 117 | +bash> ldconfig -p | grep libvdt |
| 118 | +``` |
| 119 | + |
| 120 | +Check that Herbie builds properly. |
| 121 | +In this directory, run |
| 122 | +``` |
| 123 | +make install |
| 124 | +``` |
| 125 | +To test that Herbie works, run |
| 126 | +``` |
| 127 | +racket src/herbie.rkt shell |
| 128 | +``` |
| 129 | +Assuming every command works above, |
| 130 | + your system should be set up to run the evaluation. |
| 131 | + |
| 132 | +## Running the evaluation |
| 133 | + |
| 134 | +To start the evaluation, run |
| 135 | +``` |
| 136 | +bash> bash infra/platforms-eval.sh reports 1 |
| 137 | +``` |
| 138 | +This command runs the entire evaluation. |
| 139 | +The whole process takes 2-3 hours depending the machine. |
| 140 | +We recommend using `tmux` so that the process can be detached. |
| 141 | +Since the evaluation measures real time, |
| 142 | + we recommend not using any other application while it is running, |
| 143 | + and closing any open application before running it. |
| 144 | + |
| 145 | +## Analyzing the results |
| 146 | + |
| 147 | +If the evaluation runs to completion, |
| 148 | + the `reports` directory should have the following structure |
| 149 | +``` |
| 150 | +reports |
| 151 | +|-- platforms |
| 152 | + |-- baseline |
| 153 | + |-- cache |
| 154 | + |-- drivers |
| 155 | + |-- herbie-2.0 |
| 156 | + |-- output |
| 157 | +``` |
| 158 | +All plots are rendered under `reports/platform/output`. |
0 commit comments