PIM-AutoDSE is a framework for automated instruction set architecture (ISA) and design space exploration for processing-in-memory (PIM).
It combines:
- A PIM simulator based on PIMeval-PIMbench, extended with performance and energy modeling for instruction fusion, register contention, and prefetching.
- A compiler flow built on MISAAL, which lowers Halide programs to fused or unfused PIM instructions.
- An ISA synthesis methodology that generates RISC- and CISC-style PIM instructions from pseudocode descriptions.
- Linux (x86-64 with AVX-512)
- GCC with C++17 support and GNU Make
- LLVM 12–15 (tested with LLVM 12)
- Python 3.8+
- Rust and Cargo (to build egglog)
- Git LFS
Install Git LFS before cloning, since the ISA lowering headers are stored with it:
git lfs install
git clone --recursive https://github.com/UVA-LavaLab/PIM-AutoDSE.git
cd PIM-AutoDSE
pip install -r requirements.txtBuild the toolchain and generate the environment script, pointing
LLVM_CONFIG at your LLVM installation:
LLVM_CONFIG=/path/to/llvm/bin/llvm-config ./setup.sh
source env.shsetup.sh builds Halide (from the MISAAL submodule), egglog, the simulator
library, and the ISA lowering libraries, then writes env.sh. The first run
takes a while. Run ./setup.sh --help for options such as --skip-halide.
Source env.sh in every new shell before building or running benchmarks.
Run a benchmark on a PIM configuration:
cd benchmarks
python3 run_benchmarks.py --list
python3 run_benchmarks.py --benchmark relu --config PIMeval_Bank_LPDDRCollect the results into a CSV:
python3 stats/parse_logs.py logs --recursive --csv ../results/results.csvSee benchmarks/README.md for configurations, fusion
modes, cost models, and output formats.
| Path | Contents |
|---|---|
libpimeval/ |
PIM simulator library |
benchmarks/ |
Halide benchmarks, hardware configurations, and scripts to run them and parse results |
isa/ |
ISA specification, enumeration and code generation, and the fused/unfused lowering headers |
dse/ |
Design space exploration scripts |
MISAAL/ |
Compiler (submodule) |
Hydride/ |
Rosette IR framework used for ISA synthesis (submodule) |
egglog/ |
Equality saturation engine used by MISAAL (submodule) |
PIMbench/, misc-bench/ |
Benchmarks from PIMeval-PIMbench |
Further documentation:
benchmarks/README.md— running benchmarksisa/README.md— ISA enumeration and loweringdse/README.md— design space exploration
If you use PIM-AutoDSE in your research, please cite
PIM-AutoDSE: Automated ISA and Design Space Exploration for PIM.
Citation metadata is in CITATION.cff.
- Abdul Rafae Noor — arnoor2 AT illinois DOT edu
- Farzana Ahmed Siddique — farzana AT virginia DOT edu
- Kevin Skadron — skadron AT virginia DOT edu
- Vikram Adve — vadve AT illinois DOT edu
PIM-AutoDSE is released under the MIT License. See LICENSE, and
THIRD_PARTY.md for third-party components.