BENCHMARKS

The most complete and updated set of StreamIt benchmarks is available in our GitHub repository.

The following table describes our first set of released benchmarks. This is of interest mostly for historical purposes, e.g., for comparison to other projects that utilize these benchmarks.

audio-beamformer - Audio beam former
Description This is a benchmark from the Raw group that does real-time beamforming on a microphone input array.
Coptimized.c (Hand-coded and optimized C version.)
StreamItAudiobeam.str data2.bin (StreamIt benchmark as described above.)

beamformer - Multi-channel beam former
Description Template application to perform beam-forming on a set of inputs. The input file should be preprocessed with 'cpp'; running 'make' will produce all of the possible outputs. The application has two stages. The top stage gathers input from a set of parallel channels, with FIR filters to delay each channel by a different amount. The bottom stage steers the channels into a set of beams, with a detector to sense if the signal in a particular location exceeds a given threshold. The "serialized" versions of the beamformer guarantee a deterministic output order; otherwise there are outputs in parallel, with ordering that depends on the schedule that is chosen. The "coarse" versions of the beamformer perform the same computation, but are written at a coarser level of granularity so that some filters do not need to retain internal state. This facilitates some compiler analyses, but causes the I/O rates of the filters to be much larger.
StreamItBeamFormer.str (StreamIt benchmark as described above, with parallel outputs.)
StreamItSerializedBeamFormer.str (StreamIt benchmark as described above, with deterministic output ordering.)

bitonic-sort - Bitonic sorting network
Description High performance sorting network (by definition of sorting network, comparison sequence not data-dependent). Sorts in O(n*log(n)^2) comparisons. Implementation works only for power-of-2 sizes starting from 2.
Referencehttp://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/bitonic/bitonicen.htm
Cbitonic.c ((Hand-coded C version.))
StreamItBitonicSort.str (StreamIt benchmark as described above.)
StreamItBitonicSortRecursive.str (Recursive implementation.)

DCT - IEEE-complaint DCT and IDCT.
Description The dct_ieee package contains functions that implement Discrete Cosine Transforms and Inverse Discrete Cosine Transforms in accordance with IEEE specifications for such operations. The IEEE specified DCT is used in both the MPEG and JPEG standards. A definition of what makes a DCT or inverse DCT implementation conform to the IEEE specification can be found in Appendix A of the MPEG-2 specification (ISO/IEC 13818-2) on P. 125.
StreamItDCT.str (Contains a library of DCT and iDCT implementations. There are two versions of iDCT: a reference version (based on the C reference code for MPEG) and a fast version (an integer iDCT that uses bit-twiddling, but does not have the floating point precision of the reference codes). There are also fine-grained versions of each implementation, which decompose the problem into sub-problems using splitjoins.)

des - DES encryption algoritm
Description This benchmark implements the DES encryption algorithm.
StreamItDES.str Sboxes.str Utils.str Keys.str Source.str Statics.str output.txt (StreamIt benchmark as described above.)

fft - Fast Fourier Transform kernel
Description We have a number of different implementations of the Fast Fourier Transform. Each is written at a different level of granularity. The coarse-grained implementations are better for obtaining high performance, while the fine-grained implementations are intended to demonstrate the expressiveness of the language.
Cdriver.c fft.c (Reference implementation for FFT2.)
Cdriver.c fft.c (Reference implementation for FFT3.)
StreamItFFT2.str (Blocked, coarse-grained version for use as a benchmark. Conceptually it is a single pipeline, but the main path is duplicated into a splitjoin to expose parallelism. Inputs in natural order, outputs in natural order. This is the version that we typically use for benchmarking.)
StreamItFFT3.str (More fine-grained than FFT2. Inputs in natural order, outputs in bit-reversed order (does NOT include bit-reversal stage).)
StreamItFFT4.str (More fine-grained than FFT3. Derived from original example in CC'02 paper, and intended only to demonstrate language features (has dummy weights; does not compute real FFT). Inputs in bit-reversed order, outputs in natural order (does NOT include bit-reversal stage).)
StreamItFFT5.str (Fine-grained version, more elegant than FFT4. Inputs in natural order, outputs in natural order.)

filterbank - Filter bank for multirate signal processing
Description Creates a filter bank to perform multirate signal processing. The coefficients for the sets of filters are created in the top-level init function, and passed down through the init functions to FIR filter objects. On each branch, a delay, filter, and downsample is performed, followed by an upsample, delay, and filter.
Cfilterbank.c
StreamItFilterBankNew.str

fm - Software FM radio with equalizer
Description FM radio with multi-band equalizer. The input passes through a demodulator to produce an audio signal, and then an equalizer. The equalizer is implemented as a splitjoin with a number of band-pass filters; each band-pass filter is in turn the difference of a pair of low-pass filters.
Cfmref.c
StreamItFMRadio.str

matmul-block - Blocked matrix multiply
Description Generates series of matrices, and multiplies them. In order to reduce the amount of communication, the matrices are divided into equal-sized submatrices, which are reordered, pairwise multiplied, and reordered again to get the final result matrix.
Cmatmul-block.c
StreamItMatrixMultBlock.str

mp3decoder - Partial MP3 decoder
Description Partial decoder for MPEG 1/2 Layer 3 audio. This performs the core computation necessary for audio decoding, including applying an antialiasing filter, an inverse DCT, and PCM synthesis. This is not enough to decode an MP3 audio file, however; the dynamic-rate decompression stage has not yet been implemented (though the StreamIt compiler does support dynamic rates).
StreamItMP3.str Blur.float.raw.portion

sar - Synthetic Aperture Radar
Description Modified companion code to Mehrdad Soumekh's text book "Synthetic Aperture Radar Signal Processing with Matlab Algorithms", Wiley, New York, NY, 1999. This function digitally reconstructs the SAR image using spatial frequency interpolation (see noted text, Section 4.5).
StreamItSAR.str genRawSAR.str FFT.str Statics.str Utils.str image.txt

serpent - Serpent encryption algoritm
Description This benchmark implements the Serpent encryption algorithm.
StreamItSerpent.str Source.str Keys.str L.str Utils.str Statics.str output.txt

tde - Time Delay Equalization
Description This is the Time Delay Equalization phase from the GMTI (Ground Moving Target Indiciator) application using the "Small" input dataset.
StreamIttde_pp.str (Pipeline-parallel version of the application that is a more natural fit to StreamIt. There is some data-parallelism available by setting parameters in tde_pp.str, which allows us to increase the number of filters for use in performance studies. This version canonicalizes the order of the output data.)

BatcherSort - Batcher's sorting algorithm
Description Identical to a Bitonic Sort, compares and swaps pairs of elements in parallel.
StreamItBatcherSort.str
BubbleSort - Bubble sorting algorithm
Description Simple comparison based algorithm, compares each item with adjacent one, swapping their orders if required. Causes larger values to "bubble" to end of the list. Runs in O(n^2) general case.
Referencehttp://linux.wku.edu/~lamonml/algor/sort/bubble.html
StreamItBubbleSort.str
ComparisonCounting - Comparison counting sorting algorithm
Description Algorithm that performs an N-way split of N elements. Each path calculates the ordered index for each of the N elements by comparing it to every other element.
StreamItComparisonCounting.str
InsertionSort - Optimized insertion sorting algorithm
Description Implementation based off of the Diminishing Increment Sort in Knuth "Sorting and Searching", 5.2.1. Similar to basic insertion sort except that it tries to make larger jumps to minimize data reorderings.
StreamItInsertionSort.str
MergeSort - Standard merge sort algorithm
Description Sorting algorithm that splits unordered list into halves, recursively sorts them and then merges back to get the final sorted list. Has algorithmic complexity of O(n log n).
Referencehttp://linux.wku.edu/~lamonml/algor/sort/merge.html
StreamItMergeSort.str
RadixSort - Binary radix sort algorithm
Description An implementation of binary radix sort, where each successive filter sorts on a different bit.
Referencehttp://www.jimloy.com/computer/radix.htm
StreamItRadixSort.str

autocor - Generates the autocorrelation of a series
Description This benchmark contains a filter, Cor1, which generates the autocorrelation series for some input. The input is a series of vectors of a parameterizable length, and the output is the autocorrelation series for a specified number of lags.
StreamItAutoCor.str
delay - Demonstration of delay filter
Description Demonstration of a delay filter. Uses a prework function to push N initial items before passing input to output.
StreamItDelayTest.str
fib - Fibonacci number generators
Description StreamIt programs to generate Fibonacci numbers. In general, these work by pushing previous values around a feedback loop, so they can be calculated.
StreamItFib.str (Basic implementation.)
StreamItFibFeed.str (As before, but with a top-level feedback loop.)
StreamItFib2.str (With a round-robin splitter and no peeking.)
file - Demonstration of file writer
Description Demonstration of a FileWriter filter. This generates a sequence of even integers as floating-point numbers, and writes them to float.test in binary form.
StreamItFileTest.str
hello - Analog of "Hello World!" in StreamIt: outputs a sequence of numbers
Description This is a demonstration benchmark, intended to be the simplest possible StreamIt program. There are two filters; the first generates an increasing sequence of numbers, the second prints this sequence.
StreamItHelloWorld.str
lattice - Ten-stage lattice filter
Description Constructs a ten-stage lattice filter. The first and last stages are special; otherwise, a series of mostly-identical stages are constructed in order and fed into a pipeline. Two items are carried between each stage of the lattice filter, with the second item delayed by one element.
StreamItLattice.str
matrixmult - Multiply two matrices
Description Perform a matrix-matrix multiply on square matrices. Matrices are translated and duplicated, such that a MultiplyAccumulate stage can perform vector-vector dot products to get ordered elements of the result matrix.
Cmatrix.c
StreamItMatrixMult.str
vectadd - Add two vectors
Description Perform simple vector-vector adds. In StreamIt, a vector is frequently just a series of consecutive elements on a single channel; two vectors can be added by generating elements in a splitjoin (or using a splitjoin to interleave the elements of the inputs), and then doing an elementwise add on the output.
StreamItVectAdd.str (Generate two input vectors and add them)

cookbook - Source code from the StreamIt Cookbook
Description These are the examples in the StreamIt Cookbook.
StreamItMinimal.str (Minimal program, section 2.1)
StreamItMovingAverage.str (Moving average filter, section 2.2)
StreamItLPFProgram.str (Low-pass filter, section 2.3)
StreamItBPFProgram.str (Band-pass filter, section 2.4)
StreamItEqualizerProgram.str (Equalizer, section 2.5)
StreamItEchoProgram.str (Echo effect, section 2.6)
StreamItFibProgram.str (Fibonacci number generator, section 2.7)
StreamItFMRadio.str (FMRadio with equalizer, section 3)

jpeg - JPEG decoder/encoder
Description The JPEG Transcoder takes as input a JPEG image and then decodes it, specifies a much higher level of JPEG compression, and then re-encodes it as a JPEG. JPEGtoBMP.str converts a JPEG into a BMP (output.bmp.int). Conversion of file format from bits to integers is handled in the Makefile.
StreamItTranscoder.str input.jpg.int (StreamIt version of JPEG encoder/decoder.)
StreamItJPEGtoBMP.str input.jpg.int (StreamIt version of JPEG decoder to .bmp.)

mpeg2 - MPEG2 decoder/encoder
Description A MPEG2 encoder and two versions of a MPEG2 decoder. BMPtoMPEG encodes a few pictures to a short MPEG file. MPEGtoBMP decodes an MPEG file to a series of BMP files. MPEGplayer plays an MPEG file, but needs screen output only available in the library version of StreamIt. MPEGdecoder_nomessage is a decoder that does not use message passing (and only decodes MPEG files without P or B frames).
StreamItMPEGtoBMP.str MPEGdecoder.str Parser_alt_preserved_state.str ChannelUpsampling.str MotionVectorDecode.str PictureReorder.str BlockDecode.str ColorChannelProcessing_opt_splitjoin.str DescrambleAndMotionCompensate.str MotionPrediction.str BlockDescrambler.str MacroBlockDescrambler.str MPEGglobal.str ColorSpace.str Misc.str BinaryFile.str ZigZag.str InverseQuantization.str BMP.str DCT.str cact_015.m2v (The decoder with messaging.)