- 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>
./PIMbench/<application_dir>/<application_executable>
- 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
makeat root directory or subdirectoriesmake perf: Build with-Ofastfor performance measurement (default)make debug: Build with-gand-DDEBUGfor 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_FULCRUMmake PIM_SIM_TARGET=PIM_DEVICE_BANK_LEVEL
- Build with OpenMP
make USE_OPENMP=1- Guard any
-fopenmpwith this flag in Makefile used by a few applications
This repository is the result of a collaborative effort of many talented individuals. We are grateful to everyone who contributed to this repo. Special thanks to Deyuan Guo for initially architecting the PIMeval simulator framework and bit-serial evaluation, and Farzana Siddique for her exceptional contributions on both simulator and PIMbench suite.
<citation recommendation to be updated>