This is a development release, so please be careful when using this piece of software. Please report any bugs, issues and feature requests to the issue tracker.

What is GHOST?

GHOST stands for General, Hybrid and Optimized Sparse Toolkit. It provides basic building blocks for computation with very large sparse or dense matrices. GHOST is being developed as part of the ESSEX project under the umbrella of the Priority Programme 1648: Software for Exascale Computing (SPPEXA) of the German Research Foundation (DFG).


Have a look at the GHOST-Apps and the PHYSICS project for some example applications using GHOST.

Also check out PHIST, the sparse iterative solver toolkit from the ESSEX project which supports GHOST as a kernel library.

Dependencies and optional packages

  1. A C/C++ compiler
  2. Perl (for automatic code generation)
  3. CMake >= 2.8
  4. hwloc >= 1.7 (older versions may work as well) (Install notes)
  5. A BLAS library (e.g., Intel MKL (preferred) or GSL)

In order to use GHOST at its best and make use of the full functionality you can decide to enable (some of) the following optional dependencies:

  1. An OpenMP-3.1-capable C/C++ compiler
  2. MPI (Tested versions)
  3. CUDA for employing GPU computation (Tested versions)
  4. Zoltan for sparse matrix re-ordering based on hypergraphs
  5. SCOTCH for sparse matrix re-ordering (Tested versions, Install notes)
  6. ColPack for sparse matrix coloring which is required for the CARP kernel.


The main point of documentation is located in the Doxygen pages: https://mkreutzer.bitbucket.io/ghost_doc/.

Our preprint available at the arXiv describes a lot of the concepts of GHOST: arxiv.org/abs/1507.08101.

Information on some specific topics which are not necessarily related to the GHOST API and concepts can be found in the Wiki pages on Bitbucket.

Note that the API documentation can be generated by switching to the build/ directory of your checked out code (see installation documentation below) and type make doc (Doxygen must be available). You can then open doc/html/index.html with a web browser.


First of all, clone the git repository:

git clone git@bitbucket.org:essex/ghost.git && cd ghost/

It is preferrable to perform an out-of-source build, i.e., create a build directory first:

mkdir build && cd build/

You can find installation instructions for specific machines in the wiki. To do a quick build with the system compilers, MPI and OpenMP enabled, and the default settings for code generation:

cmake .. -DCMAKE_INSTALL_PREFIX=<where-to-install>

Once the Makefile is present you can type make && make install.

You can test your build with make check.

You can toggle shared/static libs with -DBUILD_SHARED_LIBS=ON/OFF (default: shared).

For interactive specification of build options and variables, use ccmake to configure and generate a Makefile:

ccmake ..

See the information about Code generation for details on how to generate fast kernels.

If you do not want to use the system compilers, invoke (c)cmake as follows (e.g., Intel Compilers):

CC=icc CXX=icpc ccmake ..

The build system will try to find a Cblas header *cblas.h in default locations. In some cases (if MKL or GSL Cblas is detected), a hint about the necessary BLAS libraries will be created for the future build of executables which link to GHOST. If finding a Cblas header fails, or if you want to overwrite the found Cblas header, you can pass -DCBLAS_INCLUDE_DIR=<dir-of-cblas-header> to (c)cmake or set the value in ccmake. If the detected Cblas is neither MKL or GSL, the variable BLAS_LIBRARIES has to be set manually before linking any application to GHOST.

The same applies for hwloc and the variables HWLOC_INCLUDE_DIR and HWLOC_LIBRARIES.

Further reading

  1. An overview paper of GHOST
    GHOST: Building blocks for high performance sparse linear algebra on heterogeneous systems
    Moritz Kreutzer, Jonas Thies, Melven Röhrig-Zöllner, Andreas Pieper, Faisal Shahzad, Martin Galgon, Achim Basermann, Holger Fehske, Georg Hager, and Gerhard Wellein
    International Journal of Parallel Programming (2016)
    http://link.springer.com/article/10.1007/s10766-016-0464-z / http://arxiv.org/abs/1507.08101

  2. An overview poster of GHOST

  3. More on the SELL-C-σ sparse matrix storage format
    A Unified Sparse Matrix Data Format for Efficient General Sparse Matrix-Vector Multiplication on Modern Processors with Wide SIMD Units
    Moritz Kreutzer, Georg Hager, Gerhard Wellein, Holger Fehske, and Alan R. Bishop
    SIAM Journal on Scientific Computing 2014 36:5, C401-C423
    http://epubs.siam.org/doi/abs/10.1137/130930352 / http://arxiv.org/abs/1307.6209

Citing GHOST

If you are using GHOST in your publication please use the following reference:

    author  = {Kreutzer, Moritz and Thies, Jonas and R{\"o}hrig-Z{\"o}llner, Melven and 
              Pieper, Andreas and Shahzad, Faisal and Galgon, Martin and Basermann, Achim and 
              Fehske, Holger and Hager, Georg and Wellein, Gerhard},
    title   = {{GHOST}: Building Blocks for High Performance Sparse Linear Algebra on Heterogeneous Systems},
    journal = {International Journal of Parallel Programming},
    year    = {2017},
    month   = {Oct},
    day     = {1},
    volume  = {45},
    number  = {5},
    pages   = {1046--1072},
    issn    = {1573-7640},
    doi     = {10.1007/s10766-016-0464-z},
    url     = {http://dx.doi.org/10.1007/s10766-016-0464-z}