Skip to content

Parallel-in-Time/PararealF90

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Parareal F90 {#mainpage}

This is a lightweight standalone implementation of Parareal solving 3D Burger's equation using a forward Euler and a RK3SSP method as coarse and fine integrators. It contains three different implementations of Parareal, one based on MPI, one using OpenMP without pipelining and one using OpenMP with pipelining. All three versions compute the same result, the purpose of the code is to compare different implement strategies with respect to speedup, memory footprint and energy consumption.

Attribution

You can freely use and reuse this code in line with the BSD license. If you use it (or parts of it) for a publication, please cite

@inbook{Ruprecht2017_lncs,
author="Ruprecht, Daniel",
booktitle="Euro-Par 2017: Parallel Processing: 23rd International Conference on Parallel and Distributed Computing, Santiago de Compostela, Spain, August 28 -- September 1, 2017, Proceedings",
doi="10.1007/978-3-319-64203-1_48",
editor="Rivera, Francisco F. and Pena, Tom{'a}s F. and Cabaleiro, Jos{'e} C.",
pages="669--681",
publisher="Springer International Publishing",
url="https://doi.org/10.1007/978-3-319-64203-1_48",
title="Shared Memory Pipelined Parareal",
year="2017"
}

Releases

A description of the code and performance results can be found here.

Documentation

If you have Doxygen installed, you can run doxygen Doxyfile in the base directory to generate HTML documentation of the code.

How do I get set up?

To build, you will need the following files in the base directory:

  • preprocessor.f90
  • makefile.defs

In preprocessor.f90, a flag is defined that switch between linear advection and nonlinear advection (only the latter case is really Burger's equation, the other is a linear advection-diffusion problem).

In makefile.defs, the compiler is specified and compiler flags are set. The code needs no libraries, only a MPI compiler with -enable-threads and the correct flag to allow for OpenMP directives (e.g. -fopenmp for GCC). Just specify the compiler and the flags in makefile.defs and type make in the base directory.

To run, need file

  • system.defs

The entries in system.defs are used to automatically build scripts to run the code on different platforms (see e.g. build_runscript.py in /scripts). There are several examples provided. If you want to include your own system, you will need to modify the following python scripts

  • get_run_cmd.py
  • build_runscript.py
  • run_parareal.py
  • ...

Python runscripts

There is a collection of python scripts that automatically run the code with different configurations to generate different sets of data. The script run_parareal_scaling.py for example runs Parareal with different numbers of processors plus the fine integrator as reference and generates all data necessary to plot speedup.

Test harness

There is a set of tests, some written in Fortran and some in Python. Just type python run_tests in the base directory to start testing. If you add the flag nof90 then only the high level python test scripts will be run.

Who do I talk to?

This code is written by Daniel Ruprecht.