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. |