Skip to content

Beenishgul/PIMeval

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PIMeval Simulator and PIMbench Suite

License

Description

  • 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

Quick start

git clone <url_to_your_fork>
cd PIMeval/
make -j<n_proc>
./PIMbench/<application_dir>/<application_executable>

Code Structure

  • PIMeval: PIM similation framework - libpimeval
    • libpimeval/src: PIMeval simulator source code
    • libpimeval.h: PIMeval simulator library interface
    • libpimeval.a: PIMeval simulator library (after make)
  • PIMbench: PIM benchmark suite
    • cpp-aes: AES encryption/decryption
    • cpp-axpy: aX+Y operation
    • cpp-filter-by-key: Filer by key
    • cpp-gemm: General matrix-matrix product
    • cpp-gemv: General matrix-vector product
    • cpp-histogram: Histogram
    • cpp-brightness: Image brightness
    • cpp-image-downsampling: Image downsampling
    • cpp-kmeans: K-means
    • cpp-knn: kNN
    • cpp-linear-regression: Linear regression
    • cpp-radix-sort: Radix sort
    • cpp-triangle-count: Triangle counting
    • cpp-vec-add: Vector addition
    • cpp-vgg13: VGG-13
    • cpp-vgg16: VGG-16
    • cpp-vgg19: VGG-19
  • More applications
    • cpp-convolution: Convolution
    • cpp-db-filtering: DB filtering
    • cpp-dot-prod: Dot product
    • cpp-pooling: Max pooling
    • cpp-relu: ReLU
    • cpp-sad: Sum of absolute difference
    • cpp-vec-arithmetic: Vector arithmetic
    • cpp-vec-comp: Vector comparison
    • cpp-vec-div: Vector division
    • cpp-vec-logical: Vector logical operations
    • cpp-vec-mul: Vector multiplication
    • cpp-vec-popcount: Vector popcount
    • cpp-vec-broadcast-popcnt: Vector broadcast and pop count
  • Bit-serial micro-program evaluation framework
    • bit-serial
  • Functional tests
    • tests

How To Build

  • Run make at root directory or subdirectories
    • make 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

Contributors

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>

About

PIMeval simulator and PIMbench benchmark suite

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 92.0%
  • Cuda 4.7%
  • Makefile 2.8%
  • Other 0.5%