Benchmarks for Accelerator Design and Customized Architectures
MachSuite is a set of 19 benchmarks designed to mimic low-level kernels suitable for hardware acceleration.
A full description, including characterization of all the algorithms, can be found in our IISWC paper. If you use MachSite in your research, we’d appreciate a citation.
For questions, please contact Brandon Reagen.
Compiling and Running MachSuite
To compile, just run make
. There is a top-level Makefile which will recursively invoke the ones in each benchmark subdirectory.
You can also use this makefile to run all the MachSuite benchmarks at once using make run
.
If you prefer to do it piecewise, each benchmark can be invoked using the same command line:
<benchmark> [input-file] [check-file]
Where input-file
contains the inputs given in each benchmark’s subdirectory, and check-file
is the answer file to check the output of the benchmark against. Both are optional—if you don’t specify them, the benchmark will look for an input.data
and a check.data
file in the current directory.
Note that checking is disabled in the code by default, so you can safely leave off the check-file
argument.
The Benchmarks
Kernel/Algorithm | Description |
---|---|
aes/aes |
The Advanced Encryption Standard, a common block cipher. |
backprop/backprop |
A simple method for training neural networks. |
bfs/bulk |
Data-oriented version of breadth-first search. |
bfs/queue |
The “expanding-horizon” version of breadth-first search. |
fft/strided |
Recursive formulation of the Fast Fourier Transform. |
fft/transpose |
A two-level FFT optimized for a small, fixed-size butterfly. |
gemm/ncubed |
Naive, O(n3) algorithm for dense matrix multiplication. |
gemm/blocked |
A blocked version of matrix multiplication, with better locality. |
kmp/kmp |
The Knuth-Morris-Pratt string matching algorithm. |
md/knn |
n-body molecular dynamics, using k-nearest neighbors to compute only local forces. |
md/grid |
n-body molecular dynamics, using spatial decomposition to compute only local forces. |
nw/nw |
A dynamic programming algorithm for optimal sequence alignment. |
sort/merge |
The mergesort algorithm, on an integer array. |
sort/radix |
Sorts an integer array by comparing 4-bits blocks at a time. |
spmv/crs |
Sparse matrix-vector multiplication, using variable-length neighbor lists. |
spmv/ellpack |
Sparse matrix-vector multiplication, using fixed-size neighbor lists. |
stencil/stencil2d |
A two-dimensional stencil computation, using a 9-point square stencil. |
stencil/stencil2d |
A three-dimensional stencil computation, using a 7-point von Neumann stencil. |
viterbi/viterbi |
A dynamic programing method for computing probabilities on a Hidden Markov model. |