Welcome to SPBench's documentation!
===================================

.. _index:

.. imagem:: https://readthedocs.org/projects/spbench-doc/badge/?version=latest
    :target: https://spbench-doc.readthedocs.io/en/latest/?badge=latest
    :alt: Status da Documentação

.. Note::

   This project is under active development.

.. figure:: img/spbench_logo.png
   :align: center
   :alt: SPBench logo
    
`SPBench <https://github.com/gmap/spbench>`_ (Stream Processing Benchmark) is a framework for benchmarking C++ stream processing applications.
The main goal of SPBench is to enable users to easily create custom benchmarks from real-world stream processing applications and evaluate multiple parallel programming interfaces (PPIs).

The SPBench is intended for three main audiences:

   - Users who want to run performance tests with the SPBench benchmarks. It implements different real-world stream processing applications using different parallel programming interfaces (PPIs) and parallelism patterns, and makes available the main metrics used in this domain. The framework also enables users to create custom benchmarks with new PPIs.

   - Researchers and developers who want to test and evaluate new technologies and solutions. The SPBench benchmarks are also highly parameterizable and its API allows for easy and fast code reuse across all applications.

   - Students and teachers who want to learn/teach stream parallelism. The benchmarks implemented with the SPBench API abstract the low-level code and expose to users only the stream core of each application (in a few lines of code). Therefore, it allows users to easily identify each individual operator and data dependencies, to understand what the stream flow looks like. Then users can build parallelism on top of this highly simplified code.

---------

SPBench benchmark suite
-----------------------

The SPBench suite comprises the following stream processing applications and will be more in the future:

   - Ferret (PARSEC)
   - Lane Detection
   - Bzip2
   - Face Recognizer (Person Recognition)

See more details in :ref:`applications`.

For each of them, there are parallel benchmarks implemented using the following parallel programming interfaces and will be more in the future:

   - Intel TBB
   - FastFlow
   - OpenMP
   - ISO C++ Threads
   - SPar
   - GrPPI (with OpenMP, FastFlow, TBB, and ISO C++ threads backends)

---------

SPBench framework
-----------------

One of the aspects that most differentiates SPBench from related solutions is how users interact with it.
The kernel of SPBench is its API that allows users to access simplified versions of the applications included in our suite. Based on the sequential versions, users can implement parallelism, create new custom benchmarks with different parallelism strategies, or even explore new parallel PPIs.
Users can also configure and modify parameters, such as build dependencies and metrics, through a command-line interface (CLI).
This CLI accesses a database containing all benchmarks from the SPBench suite.
Other secondary parameters can be tuned via the CLI with simple commands.
This allows users to entirely focus on writing and tuning the parallelism rather than spending time with the non-relevant low-level aspects of each application. The figure below illustrates the SPBench framework.

.. figure:: img/spbench_framework.png
   :align: center
   :alt: SPBench logo

---------

.. raw:: html
   :file: slides.html


You can download the slides `here <https://gmap.pucrs.br/public_data/spbench/doc/SPBench_easing_the_complex.pdf>`_.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

---------

Contents
--------

.. toctree::

   download_links
   basic_concepts
   getting_started
   SPBench_applications
   SPBench_benchmarks
   install
   CLI
   configuration
   workloads
   metrics
   management_options
   moving
   new_app
   publications
   copying
   about
