This repository contains the code for our paper, as well as the data from our evaluation benchmarks. This repository will be updated as development occurs.
Our paper will appear at ACM CCS 2024. A preprint is available on ePrint.
For the version of the repository submitted for consideration to the ACM CCS 2024 artifact committee, please see the artifact branch.
The code for this paper was tested using the following software stack:
- Ubuntu 22.04
- Python 3.10.14
- SageMath 10.3
cudaPyTorch backend
Additional benchmarks were generated on an MacBook Pro running macOS Sonoma (mps PyTorch backend).
This installation assumes the same software setup mentioned above.
First, install the pre-requisites for figure and table generation:
sudo apt install dvipng texlive-latex-extra texlive-fonts-recommended cm-super
Next, install the Miniforge distribution of conda:
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
bash Miniforge3-$(uname)-$(uname -m).shFollow the installer prompts. Press ENTER to view the license agreement, and then type yes to agree. Then, press ENTER to accept the default installer location.
Note: if you receive a warning about a PYTHONPATH variable, type yes at the prompt to activate conda on shell startup.
Next, restart your shell. If Miniforge was installed and activated correctly, you should see the following shell prompt:
(base) user@host:~$
If your prompt does not look like this, attempt the installation of Miniforge again, or make sure to run conda init.
Then, we are going to install SageMath. This is simple:
mamba create -n sage sage python=3.10
Replace 3.10 with your Python version if it is different -- you can check with python3 --version. Make sure to press ENTER to confirm the installation.
After SageMath is installed, activate its environment:
mamba activate sage
You should now see the following shell prompt:
(sage) user@host:~$
If your prompt does not look like this, attempt the installation of SageMath again, or make sure to run mamba activate sage.
Next, we are going to install the prerequisites for Pulsar inside of the virtual environment.
cd pulsar/ # if you're not already in this directory
pip3 install -r requirements.txtOnce that is done, you should be ready to run the demo and benchmarks!
A simple demonstration of Pulsar's capabilities can be found in demo.ipynb, and does not require any specialized hardware to run.
- Open Jupyter Notebook in the Python virtual environment set up above.
jupyter notebook- Open
demo.ipynbin the Jupyter window. - Click on Edit > Clear Cell Output (if you want to see everything generated from scratch).
- Click on Run > Run All Cells.
The benchmarks from the paper can be found in bench-results/, and the tables and charts used in the paper can be found in parse_benchmarks.ipynb.
If you want to re-run the benchmarks, do the following in the Python virtual environment:
python3 benchmark.py
Note that some of the benchmarks are configured for cuda, which means a recent Nvidia graphics card is required. But, the time and throughput benchmarks can run on any backend.
The runtime depends on the hardware on the system and the backend used. On an Jetstream2 g3.medium instance (cuda), all benchmarks took about 5 hours. On a MacBook Pro with an M1 Pro chip (mps), only a subset of the benchmarks was run, which took about 3 hours.
To re-generate the tables and charts used in the paper:
- Open Jupyter Notebook in the Python virtual environment set up above.
jupyter notebook- Open
parse_benchmarks.ipynbin the Jupyter window. - Click on Edit > Clear Cell Output.
- Click on Run > Run All Cells.
The notebook uses the latest results in generating the charts, so if you re-ran the benchmarks, you should see updated charts reflecting that new run.
Note that both cuda and mps benchmarks need to be available for parse_benchmarks.ipynb to work. But, the experiments we used in our paper are included in this repository. So, if you choose to re-run the benchmarks on one device, you should still be able to run the notebook.
The Miniforge project has instructions to uninstall the distribution, if you want to restore your regular Python environment.