- PIMeval
- A PIM simulation and evaluation framework implemented as a C++ library
- Support various subarray-level bit-serial, subarray-level bit-parallel and bank-level PIM architectures
- Support both vertical and horizontal data layouts
- Support multi-PIM-core programming model and resource management
- Support high-level functional programming with a set of general APIs common to all PIM architectures
- Support low-level micro-ops programming for modeling architecture details
- Support performance and energy modeling with detailed stats tracking
- Support multi-threaded simulation for runtime
- PIMbench
- A rich set of PIM benchmark applications on top of the PIMeval functional simulation and evaluation framework
git clone <url_to_your_fork>
cd PIMeval/
make -j<n_proc>
cd /PIMbench/<application_dir>
./<application_executable_name>.out
- PIMeval: PIM similation framework - libpimeval
libpimeval/src
: PIMeval simulator source codelibpimeval.h
: PIMeval simulator library interfacelibpimeval.a
: PIMeval simulator library (after make)
- PIMbench: PIM benchmark suite
cpp-aes
: AES encryption/decryptioncpp-axpy
: aX+Y operationcpp-filter-by-key
: Filer by keycpp-gemm
: General matrix-matrix productcpp-gemv
: General matrix-vector productcpp-histogram
: Histogramcpp-brightness
: Image brightnesscpp-image-downsampling
: Image downsamplingcpp-kmeans
: K-meanscpp-knn
: kNNcpp-linear-regression
: Linear regressioncpp-radix-sort
: Radix sortcpp-triangle-count
: Triangle countingcpp-vec-add
: Vector additioncpp-vgg13
: VGG-13cpp-vgg16
: VGG-16cpp-vgg19
: VGG-19
- More applications
cpp-convolution
: Convolutioncpp-db-filtering
: DB filteringcpp-dot-prod
: Dot productcpp-pooling
: Max poolingcpp-relu
: ReLUcpp-sad
: Sum of absolute differencecpp-vec-arithmetic
: Vector arithmeticcpp-vec-comp
: Vector comparisoncpp-vec-div
: Vector divisioncpp-vec-logical
: Vector logical operationscpp-vec-mul
: Vector multiplicationcpp-vec-popcount
: Vector popcountcpp-vec-broadcast-popcnt
: Vector broadcast and pop count
- Bit-serial micro-program evaluation framework
bit-serial
- Functional tests
tests
- Run
make
at root directory or subdirectoriesmake perf
: Build with-Ofast
for performance measurement (default)make debug
: Build with-g
and-DDEBUG
for debugging and printing verbose messages
- Multi-threaded building
make -j<n_proc>
- Specify simulation target
make PIM_SIM_TARGET=PIM_DEVICE_BITSIMD_V
(default)make PIM_SIM_TARGET=PIM_DEVICE_FULCRUM
make PIM_SIM_TARGET=PIM_DEVICE_BANK_LEVEL
- Build with OpenMP
make USE_OPENMP=1
- Guard any
-fopenmp
with this flag in Makefile used by a few applications
This repository is the result of a collaborative effort by many individuals, including Farzana Ahmed Siddique, Deyuan Guo, Zhenxing Fan, Mohammadhosein Gholamrezaei, Morteza Baradaran, Alif Ahmed, Hugo Abbot, Kyle Durrer, Ethan Ermovick, Kumaresh Nandagopal and Khyati Kiyawat. We are grateful to everyone who contributed to this repository. Special thanks go to Deyuan Guo for initially architecting the PIMeval simulator framework and bit-serial evaluation, and to Farzana Ahmed Siddique for her exceptional contributions to both the simulator and the PIMbench suite.
<citation recommendation to be updated>